LoginSignup
35
13

More than 1 year has passed since last update.

coc.nvimの補完メニュー(ポップアップメニュー)の仕様が変わったらしい

Posted at

coc.nvimの補完メニューの仕様が変わったらしい

記事を書いた背景

coc.nvim0.0.82で補完メニューの仕様が変わったようです。
詳しくは以下のプロリクエスト、もしくは:h coc-completionに詳しく書いています。
[WIP] Custom completion menu #3862

それに伴い関数名などが変更されたため、設定の一部を変更する必要があります。今後、新しいバージョンを利用する方は、過去の記事がほとんど使えなくなると思われます。8/9現在、Googleで検索したところ、日本語でこの件を扱っている記事が見当たらないため、簡単にですがまとめておこうと思いました。

しかし、筆者自身もこのアップデートを知って、1,2時間程度でこの記事を書いてるため、理解が甘いところがあるかもしれませんがご了承ください。

変更点

以下がこれまで有効だった設定です。

" Enterを押すと補完を確定する
" 元々<C-y>に割り当てられた機能
inoremap <expr><CR>  pumvisible() ? "<C-y>" : "<CR>"

アップデート後、coc.nvimの補完メニューが独自の物になりました。これにより、組み込み関数であるpumvisible関数は、coc.nvimの補完メニューの状態を取得できなくなりました。今後はcoc#pum#visible関数を利用する必要があります。

以下がバージョンアップに対応した設定です。

" 以下だと動作しなかったので、直接coc#pum#confirm関数を呼んでいます。
" inoremap <silent><expr> <CR> coc#pum#visible() ? "<C-y>" : "\<CR>"
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm() : "\<CR>"

新バージョンで使用できる関数については、[WIP] Custom completion menu #3862:h coc-completionにまとめられています。

最後に

より詳細に書かれた記事や、間違えている点がありましたら、是非教えていただけると幸いです。

参考例として、筆者の設定を投げて終わりにしたいと思います。

init.vim
function! s:check_back_space() abort
  let col = col('.') - 1
  return !col || getline('.')[col - 1]  =~ '\s'
endfunction

" autocomplete
inoremap <silent><expr> <C-j> coc#pum#visible() ? coc#pum#next(1) : "\<C-j>"
inoremap <silent><expr> <C-k> coc#pum#visible() ? coc#pum#prev(1) : "\<C-k>"
inoremap <silent><expr> <Enter> coc#pum#visible() ? coc#pum#confirm() : "\<Enter>"
inoremap <silent><expr> <Esc> coc#pum#visible() ? coc#pum#cancel() : "\<Esc>"
inoremap <silent><expr> <C-h> coc#pum#visible() ? coc#pum#cancel() : "\<C-h>"

" <Tab>で次、<S+Tab>で前
inoremap <silent><expr> <TAB>
  \ coc#pum#visible() ? coc#pum#next(1):
  \ <SID>check_back_space() ? "\<Tab>" :
  \ coc#refresh()
inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<S-TAB>" " "\<C-h>"
inoremap <silent><expr> <c-space> coc#refresh()
35
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
13