読者です 読者をやめる 読者になる 読者になる

Blank File

LinuxとかPythonとかVimとか、趣味でいじる感じで

VimでNim言語を書く設定

Nim Vim

VimNimのコードを書くときに、してあると便利な設定を紹介します。

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は読み書きしやすくて速度も出るので、ぜひ試してみて下さい。