coc の環境に neosnippet を導入

経緯

スニペット機能を提供してくれるプラグインを使ったことがなくて、この土日で何か良さげなのないか探していました。 そしてとあるお方に、僕は neosnippet を使っているよ!と伺い、該当リポジトリ周辺を漁っていると neosnippet-snippets なるものと一緒に使うと、導入から直ぐ楽にスニペット機能が使えそうなので、早速使ってみようと考えました。

github.com

github.com

導入

とはいえ、以前に coc.nvim を入れていたので、 一緒に使うにはどう設定するんだろう... deoplete は別に必須ではなさそうだけど、入れたほうがいいのかな....という考えもありつつ、調べてみると、 coc.nvim 用の補完ソースがいくつかある以外、特に deoplete + coc.nvim に関する記載は見当たりませんでした。(というか似たようなインターフェースを持つプラグインなので、一緒に使うこと自体レアケースと思っていますが....)

github.com

注意書きはあるものの、 deoplete 入れずにこれでできそうなので、ひとまず neosnippet から入れてみて、あとは CocInstall :coc-neosnippet として導入を進めました。

" vim-plug を使用しています
call plug#begin('~/.vim/plugged')
...
...
Plug 'Shougo/neosnippet.vim'
Plug 'Shougo/neosnippet-snippets'

call plug#end()

...
...
" ==============================================
" neosnippet 用の設定                                                                    {{{
" ==============================================

" Plugin key-mappings.
" Note: It must be "imap" and "smap".  It uses <Plug> mappings.
imap <C-k>     <Plug>(neosnippet_expand_or_jump)
smap <C-k>     <Plug>(neosnippet_expand_or_jump)
xmap <C-k>     <Plug>(neosnippet_expand_target)

" SuperTab like snippets behavior.
" Note: It must be "imap" and "smap".  It uses <Plug> mappings.
"imap <expr><TAB>
" \ pumvisible() ? "\<C-n>" :
" \ neosnippet#expandable_or_jumpable() ?
" \    "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"
smap <expr><TAB> neosnippet#expandable_or_jumpable() ?
\ "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"

" For conceal markers.
if has('conceal')
  set conceallevel=2 concealcursor=niv
endif

" ==============================================
" neosnippet 用の設定                                                                    }}}
" ==============================================
:source ~/.config/nvim/init.vim
:PlugInstall 

こんなところで、スニペットを開くまで確認できました。 ( GIF ではないですが :pray: )

f:id:sorehaedamame:20200524223520p:plain

for まで入力すると、上の画像のように候補が出てくるので、 Ctrl + n で下に降りて行って... Ctrl + k とすると、以下のように展開されます。

f:id:sorehaedamame:20200524223532p:plain

んーちょっと確認してないのであれなんですけど、neosnippet-snippets から for という単語から候補が呼び込まれてるだろうと信じてます。。。