Vimで始める競技プログラミング 入力補完・スニペット編
2020-04-18
以前の記事の続きです。Vimをできるだけシンプルな構成で使いたい熱が定期的に訪れるのですが、前回の記事はちょうどそのタイミングだったみたいですね。
ミニマリズムより便利さを追い求めるフェーズが来たので、入力補完とスニペット関係のプラグインを導入しました。
入力補完
deoplete.nvim
を使います。
msgpack >= 1.0.0
が必要なので、入っていなかったらいれましょう。
pip install -U msgpack-python
ただし、0.4
以下からアップグレードする場合は、次のようにします。
pip uninstall msgpack-python
pip install -U msgpack
準備ができたら、いつも通り、お気に入りのプラグインマネージャーでプラグインをインストールします。deoplete.nvim
と一緒に、補完のためのソースファイルなども入れます。
設定は、let g:deoplete#enable_at_startup = 1
以外特に必要ありませんが、簡単にしておきました。
.vimrc
if has('nvim')
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
else
Plug 'Shougo/deoplete.nvim'
Plug 'roxma/nvim-yarp'
Plug 'roxma/vim-hug-neovim-rpc'
endif
Plug 'Shougo/neco-syntax' " general
Plug 'deoplete-plugins/deoplete-jedi' " python
Plug 'Shougo/deoplete-clangx' " c, cpp
Plug 'Shougo/neoinclude.vim' " header
Plug 'wokalski/autocomplete-flow' " javascript
Plug 'Shougo/context_filetype.vim' " change filetype according context
let g:deoplete#enable_at_startup = 1
let g:deoplete#sources#jedi#extra_path=system('which python')[:-2] " for pyenv and virtualenv
let g:deoplete#sources#jedi#show_docstring=0
" close preview window after completion
autocmd InsertLeave,CompleteDone * if pumvisible() == 0 | pclose | endif
スニペット
neosnippet.vim
を使います。
こちらもプラグインとソースが分離しているので、ソースも一緒にインストールします。
.vimrc
Plug 'Shougo/neosnippet'
Plug 'Shougo/neosnippet-snippets'
imap <C-k> <Plug>(neosnippet_expand_or_jump)
smap <C-k> <Plug>(neosnippet_expand_or_jump)
xmap <C-k> <Plug>(neosnippet_expand_target)
let g:neosnippet#snippets_directory = '$HOME/.vim/snippets'
let g:neosnippet#enable_snipmate_compatibility = 1
let g:neosnippet#conceal_char = '|'
if has('conceal')
set conceallevel=2 concealcursor=niv
endif
autocmd InsertLeave * NeoSnippetClearMarkers
snoremap <silent><ESC> <ESC>:NeoSnippetClearMarkers<CR>
自分のスニペットを追加するには、特定のファイルタイプを開いた状態で、:NeoSnippetEdit
とします。
これで競技プログラミングがますますはかどりますね。