NeovimでNimを書く環境を整える


まえがき

  • NeovimでNimを自動補間マシマシのコーディング環境を整える方法を書く

デモ

以下のように補間効くようになります。

検証環境

key value
OS Manjaro Linux
Neovim v0.5.0-100-g0785f8e8b

環境構築

プラグイン導入

以下の2つのプラグインを入れます。

プラグイン名 説明
alaviss/nim.nvim Nimプラグイン
prabirshrestha/asyncomplete.vim 非同期補間プラグイン

僕はdein.nvimを使用しているのでdein用の設定を書きます。

dein.toml
[[plugins]]
repo = 'prabirshrestha/asyncomplete.vim'
hook_add = '''
" TABで補完
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<cr>"

let g:asyncomplete_smart_completion = 1
let g:asyncomplete_auto_popup = 1
'''


[[plugins]]
repo = 'alaviss/nim.nvim'
on_ft = ['nim', 'nimble']
hook_add = '''
au User asyncomplete_setup call asyncomplete#register_source({
  \ 'name': 'nim',
  \ 'whitelist': ['nim'],
  \ 'completor': {opt, ctx -> nim#suggest#sug#GetAllCandidates({start, candidates -> asyncomplete#complete(opt['name'], ctx, start, candidates)})}
  \ })
'''

nimsuggestのインストール

こちらのプラグインではnimsuggestというコマンドを使用して構文解析、補間をします。

nimsuggestはNimの公式のchoosenimを使用したインストール手順にしたがってインストールすると、自動でインストールされているはずです。
インストール手順

もしnimsuggestをPATHの通ったディレクトリに配置していないなら、上記手順にしたがってNimをインストールしてください。

プラグインのアップデート

deinの関数でプラグインをアップデートします。
以下のコマンドをNeovimを起動したときに、コマンドモードで実行します。

:call dein#update()

これで環境構築完了です。

動作確認

試しに拡張子.nimのファイルを作成して適当にモジュールをimportしてください。
プロシージャ名の補間などが効くようになっていると思います。
残念ながら、import文を自動で補間まではしてくれないので、そこは書く必要があります。

プロシージャ定義元へのジャンプは gd で可能です。
Wikiに書いてありました。

リポジトリ漁ってみたのですが、Vimのヘルプドキュメントが無いようだったので、キーマッピングがあるかどうかはVimScriptを読む必要がありそうです。
ソースコード上だと、以下にキーマッピングについて定義されてました。
https://github.com/alaviss/nim.nvim/blob/master/ftplugin/nim.vim#L106

まだ開発中のプラグインのようなので、今後に期待です。

補足

nimsuggestについて

nimsuggestはNim公式が提供するNimコードの構文解析をするツールです。
公式が提供するツールなので、かなり安心感があります。
開発が滞ってプラグインが動かなくなる、といった懸念は低そうだと思います。

nimsuggestに関する情報は、以下の公式ページに情報がまとまっています。
Nim IDE Integration Guide

以上です。