vim-lspのSystemverilogを試してみた
概要
最近流行りのLSP(Language Server Protocol)を導入してみました。 Systemverilogはニッチな言語なので、導入記事無かったので。。。 違うところは指摘してほしいです。
ただ、定義ジャンプとか非対応!って言われるので、何とか対応したいところです。わからん。
vim-plugの導入
deinも使ってみましたが、導入説明の記事でvim-plugを使っているのと、 使ってみて使いやすかったので、鞍替えです。
githubのサイトを見ながら導入します。
上記の説明にあるWindows (PowerShell)をコピペすると、必要なファイルが~\vimfiles\autoloadに落ちてきます。コマンドプロンプトではなく、PowerShellで行ってください。Shift+右クリックで起動できますが、出ない場合はスタートでpowershellで検索してください。
あとは、vimrcの中に、
call plug#begin() call plug#end()
と書き、beginとendの中に管理したいプラグインのアドレスを入れれば準備完了です。次回起動時に、:PlugInstallと打つと自動でインストールされます。
vim-lspの導入
これに関しては、mattnさんの記事を見ながらやるといいと思います。
私が分かりづらかったところだけ補足します。
文章の中ほどに
その為、新しい Language Server を導入する度に以下の様な設定が増えていき、設定ファイルがどんどん増えてしまっていました。それが vim-lsp-settings の導入により、その殆どを消し去る事ができました。以下が僕の ~/.vim/_config/200-lsp.vim です。
とありますが、これはvimrcをプラグインの設定ごとに分割しているのだと思われます。vimrcの分割に関しては wakame.hatenablog.jp こちらが分かりやすいです。
分割しない場合はvimrcにそのまま記載すればよいでしょう。最終的に出来上がったvimrcはこうなりました。
" Plugin "--------------------------------------------- call plug#begin() " vim-lsp Plug 'prabirshrestha/async.vim' Plug 'prabirshrestha/asyncomplete.vim' Plug 'prabirshrestha/asyncomplete-lsp.vim' Plug 'prabirshrestha/vim-lsp' Plug 'mattn/vim-lsp-settings' "Plug 'mattn/vim-lsp-icons' call plug#end() "LSP Config "------------------------------- if empty(globpath(&rtp, 'autoload/lsp.vim')) finish endif function! s:on_lsp_buffer_enabled() abort setlocal omnifunc=lsp#complete setlocal signcolumn=yes nmap <buffer> gd <plug>(lsp-definition) nmap <buffer> <f2> <plug>(lsp-rename) inoremap <expr> <cr> pumvisible() ? "\<c-y>\<cr>" : "\<cr>" endfunction augroup lsp_install au! autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled() augroup END command! LspDebug let lsp_log_verbose=1 | let lsp_log_file = expand('~/lsp.log') let g:lsp_diagnostics_enabled = 1 let g:lsp_diagnostics_echo_cursor = 1 let g:asyncomplete_auto_popup = 1 let g:asyncomplete_auto_completeopt = 0 let g:asyncomplete_popup_delay = 200 let g:lsp_text_edit_enabled = 1
LSP Config以下の内容はよくわからないのでmattnさんの記事そのままです。
iconに関しては鬱陶しい必要ないのでコメントアウトしています。
この状態でgvimを起動し、:PlugInstallを行うと一通りのプラグインがインストールされます。
次に.svファイルを開き、なすがままに:LspInstallServerを実行すると完了です。
svlintの設定をする
vim-lspではSystemverilogのリンター?にsvlintを使用しています。ただ、デフォルトではレガシーな現場で使うには適さないルールが多く有効になっています。また、プロジェクト毎にルールが変わる場合もあるでしょう。必要なルールのみ有効にします。
以下のページを見ながら、.svlint.tomlを作成、プロジェクトルートに置きます。windowsの場合、リリースページからのダウンロードで実行ファイルを落とし、svlint.exeのフォルダでコマンドを実行するとよいでしょう。
ここまでやってやっと使い物になりそうな感じです。