2021年版 vim + goplsの設定

goplsが出てから, vimでも定義ジャンプやシンボル検索、ドキュメント参照等が行えるようになった。 たまにVSCodeを触りvimでの作業を改善できないか考える中で、自身の設定が古いことに気付いた。また、ググってもなかなか出てこなかったのでメモとして記述する。 cf. GitHub dotfiles いきなりだが、vimrcとvim-lsp-settings/settings.jsonを抜粋して貼り付ける。 以前、GoではLspCodeAction, LspCodeLens等をサポートしていなかったが、今では使えるようになっている。 キーマップに設定している関数は全てGoで使用出来る。 ただし、カーソルがどこにいても実行出来るわけではないので注意が必要。 LspCodeActionはカーソルの位置によって実行内容が変わるのでそこも注意。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 ... Plug 'prabirshrestha/vim-lsp' Plug 'mattn/vim-lsp-settings' Plug 'prabirshrestha/asyncomplete-lsp.vim' Plug 'mattn/vim-gomod' ... " ------------------------------------------------------------------------------ " vim-lsp " ------------------------------------------------------------------------------ function! s:on_lsp_buffer_enabled() abort setlocal omnifunc=lsp#complete setlocal signcolumn=yes if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif nmap <buffer> <leader>ac <plug>(lsp-code-action) nmap <buffer> <leader>cl <plug>(lsp-code-lens) nmap <buffer> <leader>df <plug>(lsp-definition) nmap <buffer> <leader>dd <plug>(lsp-document-diagnostics) nmap <buffer> <leader>im <plug>(lsp-implementation) nmap <buffer> <leader>pdf <plug>(lsp-peek-definition) nmap <buffer> <leader>sm <plug>(lsp-document-symbol-search) nmap <buffer> <leader>Sm <plug>(lsp-workspace-symbol-search) nmap <buffer> <leader>rf <plug>(lsp-references) nmap <buffer> <leader>td <plug>(lsp-type-definition) nmap <buffer> <leader>rn <plug>(lsp-rename) nmap <buffer> <leader>en <plug>(lsp-next-error) nmap <buffer> <leader>ep <plug>(lsp-previous-error) nmap <buffer> <leader>ho <plug>(lsp-hover) let g:lsp_format_sync_timeout = 500 autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync') " refer to doc to add more commands endfunction augroup lsp_install au! " call s:on_lsp_buffer_enabled only for languages that has the server registered. autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled() augroup END 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 // vim-lsp-settings/settings.json { "go": { "gopls": { "initialization_options": { "analyses" : {"fillstruct":true}, "staticcheck": true, "directoryFilters": [ "-debug" ], "completeUnimported": true, "usePlaceholders": true, "matcher": "fuzzy", "codelenses": { "gc_details": false, "generate": true, "test": true, "tidy": true, "vendor": false }, "hoverKind": "SynopsisDocumentation" } } } } vim + goplsで新しく設定したこと LspCodeAction vim-lspのhelpにあるように、LspCodeActionが実行出来る行では A> が表示される。 ...

2021年6月16日 · 2 分

From denite.nvim To fzf.vim

denite.nvimとfzf.vimって比較記事? 違います。断捨離した結果、fzf.vimで事足りてしまったという記事です。 denite.nvimとfzf.vimは、一見やれることが似ているように見えますが提供しているインタフェースが違います。 denite.nvimの方が拡張性/汎用性が高いです。Pythonスクリプトを呼び出せますし。 どうしてやめたん? Python3とpipの環境整備に疲れたというのが理由で完全に力不足なだけです。 そもそも使いこなせていなかったっていうのも大きい。自分に必要な機能が何か見直したら次のがあれば十分っぽい。 コマンドの結果の一覧表示(x-motemen/ghq list, mattn/memo list, history等) 一覧表示の後のアクションを指定可能(cd, vim) buffer切替 fzf.vimはfzfのついでに入れていただけで全く使っていなかった。Shougo/denite.nvimでfzf.vimで同じことが出来るし、sourceの拡張がいくつもあるのでそれで十分だった。 もともとfzfが好きなのもあって、fzf.vimで上記が実現出来るように設定した、っていうかhelpからパクってきた。 何日か使っていて快適に使えているので結構満足。previewはbatってコマンド入れないとsyntax highlightされなかったのでいれたけど、なんとなくそっちの方がリッチっぽいという理由だけなので重ければそのうち消す。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 command! -bang -nargs=? -complete=dir Files call fzf#vim#files( \ <q-args>, \ fzf#vim#with_preview(), \ <bang>0) command! -nargs=0 Ghq call fzf#run({ \ 'source' : 'ghq list --full-path', \ 'sink' : 'cd' \}) command! -nargs=0 Mru call fzf#run({ \ 'source' : v:oldfiles, \ 'sink' : 'edit', \ 'options' : '-m -x +s', \ 'down' : '40%' \}) command! -bang -nargs=? Memo call fzf#vim#files( \ expand($HOME . '/.config/memo/_posts'), \ fzf#vim#with_preview({'options': ['--layout=reverse', '--info=inline']}), \ <bang>0) command! -bang -nargs=* Rg call fzf#vim#grep( \ 'rg --column --no-heading --color=always --smart-case '.shellescape(<q-args>), \ 1, \ fzf#vim#with_preview(), <bang>0) nmap ,f :Files<CR> nmap ,s :Snippet<CR> nmap ,b :Buffers<CR> nmap ,g :Ghq<CR> nmap ,m :Mru<CR> nmap ,mm :Memo<CR> nmap ,rg :Rg<CR>

2020年2月11日 · 1 分