まえがき
- NeovimでNimを自動補間マシマシのコーディング環境を整える方法を書く
デモ
以下のように補間効くようになります。
検証環境
| key | value |
|---|---|
| OS | Manjaro Linux |
| Neovim | v0.5.0-100-g0785f8e8b |
環境構築
プラグイン導入
以下の2つのプラグインを入れます。
| プラグイン名 | 説明 |
|---|---|
| alaviss/nim.nvim | Nimプラグイン |
| prabirshrestha/asyncomplete.vim | 非同期補間プラグイン |
僕はdein.nvimを使用しているのでdein用の設定を書きます。
[[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
以上です。
