peeeanuts

ほぼほぼ忘備録

vim-lspのSystemverilogを試してみた

概要

最近流行りのLSP(Language Server Protocol)を導入してみました。 Systemverilogはニッチな言語なので、導入記事無かったので。。。 違うところは指摘してほしいです。

windowsgvimを対象にしています。

ただ、定義ジャンプとか非対応!って言われるので、何とか対応したいところです。わからん。

vim-plugの導入

deinも使ってみましたが、導入説明の記事でvim-plugを使っているのと、 使ってみて使いやすかったので、鞍替えです。

githubのサイトを見ながら導入します。

github.com

上記の説明にあるWindows (PowerShell)をコピペすると、必要なファイルが~\vimfiles\autoloadに落ちてきます。コマンドプロンプトではなく、PowerShellで行ってください。Shift+右クリックで起動できますが、出ない場合はスタートでpowershellで検索してください。

あとは、vimrcの中に、

call plug#begin()

call plug#end()

と書き、beginとendの中に管理したいプラグインのアドレスを入れれば準備完了です。次回起動時に、:PlugInstallと打つと自動でインストールされます。

vim-lspの導入

これに関しては、mattnさんの記事を見ながらやるといいと思います。

mattn.kaoriya.net

私が分かりづらかったところだけ補足します。

文章の中ほどに

その為、新しい 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のフォルダでコマンドを実行するとよいでしょう。

qiita.com

ここまでやってやっと使い物になりそうな感じです。