Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

まえがき

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

デモ

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

nimsuggest.gif

検証環境

keyvalue
OSManjaro Linux
Neovimv0.5.0-100-g0785f8e8b

環境構築

プラグイン導入

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

プラグイン名説明
alaviss/nim.nvimNimプラグイン
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>"letg:asyncomplete_smart_completion=1letg:asyncomplete_auto_popup=1'''[[plugins]]repo='alaviss/nim.nvim'on_ft=['nim','nimble']hook_add='''auUserasyncomplete_setupcallasyncomplete#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

以上です。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>