kenban nikki    archives   tags   

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とします。

これで競技プログラミングがますますはかどりますね。