haskell-vim-nowを使うと早いらしい
いろいろいっぺんに入れてくれるらしいです。
が、出しゃばり過ぎてて既存の設定と衝突すること間違いなし1なので、今回は上記で紹介しているものをひたすれ入れてその時の記録をメモします。
つまり、haskell-vim-nowのinstall.shを手で実行することになります。
人間シェルスクリプトです。
(実際はそれほどきっちり実行しませんでしたが...)
事前に必要なもの
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にはないパッケージに依存しているらしく、怒られました。
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はこんな感じ
ほぼまっさらですね!
flags:{}packages:[]extra-deps:-cabal-helper-0.6.1.0-pure-cdb-0.1.1resolver:lts-3.10
... で、今度はできました!
$ 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に怒られました。
その2 型チェックや入力補完: ghc-mod
おかげさまでghc-mod 5.4以降、ghc-modはstackをサポートしてくれるようになりました。
試そう!
$ 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
なんかエラーが起きましたね。。。
先ほどの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]
バッチリ!
とりあえず動いているようです。
GHCのバージョンを切り替えたりした時ちゃんと動くかまではあいにく試せておらず。
とりあえずここまで。
他にも、おなじみhoogleをvimから呼び出すプラグインや、
ポイントフリースタイルとそうでないバージョンとで書き換えるpointfreeにpointful、
コードフォーマッターのstylish-haskellもhaskell-vim-nowでは導入・設定してくれるみたいです。
が、ひとまず、一番試したかったものが動いているので今日は名前を挙げるだけにしておきます。
また次回のHaskellもくもく会も環境づくりかな...
ところで
リファクタリングツールのHaReがないじゃないか!
これも入れよう!