VimでNim言語を書く設定
VimでNimのコードを書くときに、してあると便利な設定を紹介します。
Nimについては、このブログの前の記事を参照して下さい。
他のエディタの設定はここで紹介されています。以下、一部前の記事と重複しますがご容赦ください。
最低限必要なこと
nimrod.vimをインストールして下さい。 これでシンタックスハイライトや自動インデントが有効になり、ジャンプ機能等も使えるようになります。
以降は主に私が使っているプラグイン用の設定です。
quickrun の設定
簡単にコンパイルから実行までをしてくれるvim-quickrun用の設定です。
quickrunデフォルトの設定は少し古かったので動かず、nimrod.vimに含まれているquickrun用の設定は少し物足りなかったので別途設定を書きました。
[2015年1月22日 追記]
vim-quickrunに送ったPRがマージされました。 以下の設定をしなくても、最新のquickrunに更新すれば、デフォルトでNimの設定が入ります。
[追記終わり]
vimrcに以下のコードを追記してください。
if !exists('g:quickrun_config') let g:quickrun_config = {} endif let g:quickrun_config['nim'] = { \ 'command': 'nim', \ 'cmdopt': 'compile --run --verbosity:0', \ 'hook/sweep/files': '%S:p:r', \ 'tempfile': '%{substitute(tempname(), ''\(\d\+\)$'', ''nim\1.nim'', '''')}' \}
範囲選択して実行することもできます。
自分である程度使ってみて、問題なさそうならquickrunにPRを送るつもりです(送付&マージ済み)。
問題があれば(特に範囲選択実行)ご指摘いただけると幸いです。
シンタックスチェックの設定(SyntasticとWatchdogs)
syntasticの設定はnimrod.vimに含まれています。 おそらくインストールするだけで使えます(動作未確認)。
[2015年1月22日 修正]
vim-watchdogsに送ったPRがマージされ、watchdogsにNimのデフォルト設定が含まれるようになりました。 以下の設定をしなくても、最新のvim-watchdogsに更新するだけでNimのシンタックスチェックができます。
vim-watchdogsは以下の設定を追加することで有効になります。
[追記終わり]
let g:quickrun_config["watchdogs_checker/nim"] = { \ "command" : "nim", \ "cmdopt" : "check ", \ "errorformat" : '%-GHint: %m,' \ . '%E%f(%l\, %c) Error: %m,' \ . '%W%f(%l\, %c) Hint: %m', \ } let g:quickrun_config["nim/watchdogs_checker"] = { \ "type" : "watchdogs_checker/nim", \ }
vim-watchdogs自体の設定は以下の投稿を参照してください。
スニペットの設定
慣れていない言語の場合、私はifやforの書き方すら忘れたりします。そんな時でもとりあえずif
とか入力して展開すればなんとなく書き方がわかるので、個人的にスニペットは重要です。
私はneosnippetをつかっているので、それ用のスニペットを書きました。
neosnippetを使っている場合は、~/.vim/snippets
以下にnim.snip
というファイルを作って保存してください。
ここで表示するにはさすがに長いので、Gistへ置きました。 ここから参照してください。
タグの設定(ctags、tagbar)
Vimでコードを書くけどctagsを知らない方、すぐにインストールしましょう。
関数やクラス名の上で <C-]>
を叩くとその定義場所にジャンプできて便利です。
戻りたくなったら <C-t>
ですが、 <C-o>
でも戻れます。
<C-o>
は検索や gg
などの異動の後でも戻れて便利です。
戻りたくなったらとりあえず <C-o>
しましょう。
戻りすぎたら <C-i>
で一つ戻れます。
ctags
ctagsの設定を追加することで、タグジャンプできるようになります。
~/.ctagas
に以下を追記します。ファイルがなかったら作って下さい。
--langdef=nimd --langmap=nim:.nim --regex-nim=/(\w+)\*?\s*=\s*object/\1/t,class/ --regex-nim=/(\w+)\*?\s*=\s*enum/\1/t,enum/ --regex-nim=/(\w+)\*?\s*=\s*tuple/\1/t,tuple/ --regex-nim=/(\w+)\*?\s*=\s*range/\1/t,subrange/ --regex-nim=/(\w+)\*?\s*=\s*proc/\1/t,proctype/ --regex-nim=/proc\s+(\w+)/\1/f,procedure/ --regex-nim=/method\s+(\w+)/\1/f,method/ --regex-nim=/proc\s+`([^`]+)`/\1/o,operator/ --regex-nim=/template\s+(\w+)/\1/t,template/ --regex-nim=/macro\s+(\w+)/\1/m,macro/
Tagbar
Tagbar は私が愛用しているプラグインの一つです。 開いているファイルのタグを一覧表示でき、エンターでジャンプできます。
これもNimを使う時には設定が必要です。以下の設定を.vimrc
に追加して下さい。
let g:tagbar_type_nim = { \ 'ctagstype' : 'nim', \ 'kinds' : [ \ 'h:Headline', \ 't:class', \ 't:enum', \ 't:tuple', \ 't:subrange', \ 't:proctype', \ 'f:procedure', \ 'f:method', \ 'o:operator', \ 't:template', \ 'm:macro', \ ], \ }
同種のプラグインでTaglistというものもあります。おそらくそちらでも類似の設定が必要ではないかと思います。
オムニ補完の設定 [2015年2月11日 追記]
Nimrod.vimの補完設定はバグってます。修正PR送りましたが放置されてるので、取り込まれるまでは以下の記事を参考にして下さい。neocompleteで自動補完できるようになります。
Nimrod.vimのomni補完をまともっぽく動くようにしたので人柱募集です - Blank File
最後に
これでNimを書く環境は概ね整ったと思います。Nimは読み書きしやすくて速度も出るので、ぜひ試してみて下さい。