🦍
coc.nvimでウィンドウ分割して定義ジャンプしたい
初めに
普段coc.nvim
を使ってよく定義ジャンプしていますが、たまに画面分割して定義ジャンプしたいことがあります。
coc.nvim
がデフォルトで用意している<Plug>(coc-definition)
ではそれができないので、ちょっとだけ手を入れる必要があります。
やり方
vimrc
に次の設定を追加して、<C-t>
で定義ジャンプする再のウィンドウの開き方を指定できます。
" [
" {"text": "(e)dit", "value": "edit"}
" {"text": "(n)ew", "value": "new"}
" ]
" NOTE: text must contains '()' to detect input and its must be 1 character
function! ChoseAction(actions) abort
echo join(map(copy(a:actions), { _, v -> v.text }), ", ") .. ": "
let result = getcharstr()
let result = filter(a:actions, { _, v -> v.text =~# printf(".*\(%s\).*", result)})
return len(result) ? result[0].value : ""
endfunction
function! CocJumpAction() abort
let actions = [
\ {"text": "(s)plit", "value": "split"},
\ {"text": "(v)slit", "value": "vsplit"},
\ {"text": "(t)ab", "value": "tabedit"},
\ ]
return ChoseAction(actions)
endfunction
nnoremap <silent> <C-t> :<C-u>call CocActionAsync('jumpDefinition', CocJumpAction())<CR>
1ポイント解説
getcharstr()
は入力から一文字を取得する関数で、キーを入力するまで待ちが発生します。
v
またはs
を入力するとそれに応じてvalue
を返し、それをjumpDefinition
の第1引数で指定するとウィンドウの開き方を変更できます。
最後に
Happy Vimming!!
Discussion