Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

(随時更新)vimによるHaskell編集環境メモ(ghc-modとかcodexとかをstackで入れてvimから使う)

$
0
0

haskell-vim-nowを使うと早いらしい

いろいろいっぺんに入れてくれるらしいです。
が、出しゃばり過ぎてて既存の設定と衝突すること間違いなし1なので、今回は上記で紹介しているものをひたすれ入れてその時の記録をメモします。

つまり、haskell-vim-nowのinstall.shを手で実行することになります。
人間シェルスクリプトです。
(実際はそれほどきっちり実行しませんでしたが...)

事前に必要なもの

:warning: stack・vimをなるべく新しいバージョンにしましょう。
stackはghc-mod 5.4が要求している通りver. 0.1.4.0以降、
vimはhaskell-vim-nowが要求している通りver. 7.4以降が必要です。
今回はhaskell-vim-nowを直接使うわけではありませんが、導入するライブラリが要求しているはずです。

とりあえずまとめて入れる

haskell-vim-nowが紹介しているプラグインが依存しているコマンド群をまとめて入れましょう。
haskell-vim-nowはstackを前提としているのでstack必須です。
stackについてはこちらを参考にどうぞ。

$ stack --resolver lts-3.10 install ghc-mod hasktags codex hscope pointfree pointful hoogle stylish-haskell

... が、lts-3.10にはないパッケージに依存しているらしく、怒られました。 :sweat_smile:

Run from outside a project, using implicit global config
Using resolver: lts-3.10 specified on command line
While constructing the BuildPlan the following exceptions were encountered:

--  While attempting to add dependency,
    Could not find package cabal-helper in known packages

--  Failure when adding dependencies:
      cabal-helper: needed (==0.6.* && >=0.6.0.0), not present in build plan (latest is 0.6.1.0)
    needed for package: ghc-mod-5.4.0.0

--  Failure when adding dependencies:
      pure-cdb: needed (-any), not present in build plan (latest is 0.1.1)
    needed for package: hscope-0.4.2

--  While attempting to add dependency,
    Could not find package pure-cdb in known packages

Recommended action: try adding the following to your extra-deps in /home/yu/.stack/global/stack.yaml
- cabal-helper-0.6.1.0
- pure-cdb-0.1.1

You may also want to try the 'stack solver' command

幸いstackさんは丁寧に解決方法を示してくれます。
stack.yamlのextra-depsという設定項目に問題のパッケージを書いて再挑戦!
現在の私のstack.yamlはこんな感じ :arrow_down:
ほぼまっさらですね!

flags:{}packages:[]extra-deps:-cabal-helper-0.6.1.0-pure-cdb-0.1.1resolver:lts-3.10

... で、今度はできました! :smile:

$ stack --resolver lts-3.10 install ghc-mod hasktags codex hscope pointfree pointful hoogle stylish-haskell
...
Copied executables to /home/yu/.local/bin:
- stylish-haskell
- pointful
- pointfree
- hscope
- hoogle
- hasktags
- ghc-modi
- ghc-mod
- codex

ご丁寧に、インストールした実行ファイルのパスまで教えてくれます。
$PATHに追加すること、けって〜い!

各種コマンドをvimから実行するよう設定

それでは入れた大量のコマンドをvimから呼び出す設定を書いていきましょう。
やはりhaskell-vim-nowのvimrcを参考にします。

その1 Tagの書き出し: codex・hasktags・hscope

codexのREADME通り、vimrcファイルに次の行を追加します。

settags=tags;/,codex.tags;/

まだ入れてなかったので、ctagsからファイルのアウトラインを表示してくれるtagbarも入れましょう。

NeoBundle 'majutsushi/tagbar'

ctagsがサポートしていない言語は標準でサポートしてくれていないみたいです。
tagbarのWikiによれば、次の設定を追加すれば良いとのこと。
そういえばhaskell-vim-nowのvimrcにも同じのが書いてありました。

letg:tagbar_type_haskell = {
    \ 'ctagsbin'  : 'hasktags',
    \ 'ctagsargs' : '-x -c -o-',
    \ 'kinds'     : [
        \  'm:modules:0:1',
        \  'd:data: 0:1',
        \  'd_gadt: data gadt:0:1',
        \  't:type names:0:1',
        \  'nt:new types:0:1',
        \  'c:classes:0:1',
        \  'cons:constructors:1:1',
        \  'c_gadt:constructor gadt:1:1',
        \  'c_a:constructor accessors:1:1',
        \  'ft:function types:1:1',
        \  'fi:function implementations:0:1',
        \  'o:others:0:1'
    \ ],
    \ 'sro'        : '.',
    \ 'kind2scope' : {
        \ 'm' : 'module',
        \ 'c' : 'class',
        \ 'd' : 'data',
        \ 't' : 'type'
    \ },
    \ 'scope2kind' : {
        \ 'module' : 'm',
        \ 'class'  : 'c',
        \ 'data'   : 'd',
        \ 'type'   : 't'
    \ }
\ }

次に、gitで管理している.hsファイルに対してまとめてhscopeを実行するシェルスクリプト、git-hscopeをコピペして$PATHに追加しておきましょう。
どうやら、vimからタグを生成するコマンドの中で使用しているみたいです。
もちろん実行権限の追加も忘れずに。

それから、ctagsも入れておきましょう。
hasktagsがあるからいいのかな、と思ったらインストールしてないとtagbarに怒られました。 :cry:

その2 型チェックや入力補完: ghc-mod

おかげさまでghc-mod 5.4以降、ghc-modはstackをサポートしてくれるようになりました:tada:
試そう!

$ ghc-mod type src/Foo.hs 26 1
...
EXCEPTION: types:
           readCreateProcess: /home/yu/.stack/global/.stack-work/install/x86_64-linux/lts-3.10/7.10.2/libexec/cabal-helper-wrapper "/home/yu/Dropbox/prg/prj/guess-numbers""/home/yu/Dropbox/prg/prj/guess-numbers/dist""write-autogen-files"(exit 1): failed

なんかエラーが起きましたね。。。 :fearful:
先ほどのghc-mod 4.5のリリースアナウンスメントでも触れている通り、
dist/setup-configというディレクトリがプロジェクトのルートにあるとcabalで設定したプロジェクトだと認識してしまい、うまく動かないそうです。
私が試したプロジェクト自体はstackで作成したはずですが、stackの仕様が変わったのか、dist/setup-configがまだあったのです。

$ mv dist/setup-config dist/setup-config.bak
$ ghc-mod type src/Foo.hs 26 1
2152142"(Ordering, t) -> Bool"1912360"[Int] -> Int -> ([Ordering], [Int]

バッチリ! :satisfied:
とりあえず動いているようです。 :relaxed:
:bow: GHCのバージョンを切り替えたりした時ちゃんと動くかまではあいにく試せておらず。

とりあえずここまで。

他にも、おなじみhoogleをvimから呼び出すプラグインや、
ポイントフリースタイルとそうでないバージョンとで書き換えるpointfreepointful
コードフォーマッターのstylish-haskellもhaskell-vim-nowでは導入・設定してくれるみたいです。
が、ひとまず、一番試したかったものが動いているので今日は名前を挙げるだけにしておきます。
また次回のHaskellもくもく会も環境づくりかな... :sweat_smile:

ところで

リファクタリングツールのHaReがないじゃないか!
これも入れよう!


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>