LoginSignup
9
4

More than 3 years have passed since last update.

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

Posted at

まえがき

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

デモ

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

nimsuggest.gif

検証環境

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

以上です。

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4