progrhyme's tech blog

主にIT関連の技術メモ

今更だけどNeoBundleからdein.vimに乗り換えて、プラグインを6つ追加した

はじめに

本当に今更である。

NeoBundledein.vimは、Vimプラグインマネージャーである。
他に有名なものでは、Vundleやvim-plugといったものがある。*1

NeoBundleはもう4年以上前に開発が停止し、dein.vimへの移行が促されている。*2

作業環境

dein.vimのインストール

https://github.com/Shougo/dein.vim#quick-start に従う。

インストール先は ~/.vim/dein とした。

curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
sh ./installer.sh ~/.vim/dein

自分はいつものVim環境を新しいPCやサーバでさっとセットアップしたいことがそこそこあるので、セットアップ用のシェルスクリプトを用意している。
今、そのスクリプトこんな感じになっている。

vimrcの移行

NeoBundle用の記述をdein.vim用に書き直す。
dein.vimではインストールするプラグインのリストや、それに付随する設定をTOML形式の別ファイルで管理することができるので、その方式を使うことにした。

具体的には、このコミットで対応した。

移行後、 'Align' プラグインで警告が出ていることにしばらく気づかず、挙動が少しおかしくなっていたが、 'vim-scripts/Align' に修正したら問題が解消した。

追加したプラグイン

近年、ローカルのマシンではVisual Studio CodeIntelliJ IDEAなどのリッチなツールに浮気していることもあり、Vim環境を快適にしようという努力を怠っていたが、これを機に新しいプラグインを入れてみることにした。

cespare/vim-toml

今回TOMLの設定ファイルを書いたのだけど、シンタックスハイライトやオートインデントが効かなかったので。

ctrlpvim/ctrlp.vim

色々インクリメンタル検索してファイルを開いたりジャンプできるすごいやつ。
とても重宝しそう。

dein.vimのTOMLで次のように設定した:

[[plugins]]
repo = 'ctrlpvim/ctrlp.vim'
hook_add = '''
  let g:ctrlp_cmd = 'CtrlPMixed'
  let g:ctrlp_user_command =
    \ ['.git', 'cd %s && git ls-files -co --exclude-standard']
  nnoremap <Leader>/ <ESC>:CtrlPLine<Return>
'''

CtrlPMixed は下の3つのコマンドを足したようなもの:

  • CtrlP ... カレントディレクトリ下のファイル検索。 g:ctrlp_user_command で挙動を変えている
  • CtrlPBuffer ... バッファ一覧から検索
  • CtrlPMRUFiles ... これまで開いたファイル履歴から検索

もう全部 CtrlPMixed でいいんじゃないかな、と思ったので、デフォルトにした。

g:ctrlp_user_commandVimglobpath() の代わりに使うコマンドを定義できる。
dotfilesを編集しながら試していたのだが、 globpath() では隠しファイルが出てこなかったので、 git ls-files -o の方がよかろうと思った。
git ls-files が使えないディレクトリ下では globpath() にフォールバックしてくれる。素晴らしい。

参考:

(余談)

  • denite.vimでも似たようなことができるらしいので、入れようかと思ったけど、依存が嫌だったので止めた
  • Uniteでも似たようなことができるっぽい。昔からUnite入れてるけど、全然使いこんでない…

leafcage/yankround.vim

ヤンクしたレジスタ履歴をさっと一覧して選んだり、トグルで選べるようにしてくれる君。

レジスタ一覧を開いたり、いくつか前のレジスタを取り出す操作をいつも覚えてない…。ブックマークして再利用するなんて(ry
そういう操作をしたいとき、いつも煩わしい思いをしていたので、今後は楽になりそう。

dein.vimのTOMLでは次のように設定した:

[[plugins]]
repo     = 'leafcage/yankround.vim'
hook_add = '''
  nmap p <Plug>(yankround-p)
  xmap p <Plug>(yankround-p)
  nmap P <Plug>(yankround-P)
  nmap gp <Plug>(yankround-gp)
  xmap gp <Plug>(yankround-gp)
  nmap gP <Plug>(yankround-gP)
  nmap <C-k> <Plug>(yankround-prev)
  nmap <C-j> <Plug>(yankround-next)
  nnoremap <Leader>y <ESC>:Unite yankround<Return>
'''

<C-k>, <C-j> はふつう <C-p>, <C-n> を当てることが多いようだけど、 ctrlp.vimとかぶるので変えた。

また、yankround.vimはctrlp.vimのExtensionが同梱されているようで、 CtrlPYankRound というコマンドが使えるようになる。
これでもレジスタ一覧を表示して選べるのだけど、残念ながらバッファの中身で検索して選ぶということができなかったので、私の中では :Unite yankround に軍配が上がった。

kana/vim-operator-user

下のvim-operator-replaceが依存しているので。

kana/vim-operator-replace

これにより、ヤンクしているテキストでカーソル下のテキストを置き換えることができる。
前述の通り、私はレジスタが使いこなせない子なので、こういう操作をしたいときいつも(ry

dein.vimのTOMLで次のように設定した:

[[plugins]]
repo = 'kana/vim-operator-replace'
hook_add = '''
  nmap <Space> <Plug>(operator-replace)
'''

ドキュメントには map を使うように書いてあるので、その方がいいかもしれないが、試した限りでは nmap でも問題なさそうだった。

操作例は下のリンク先を参照。

参考:

ervandew/supertab

IDEとかみたいにタブ補完を可能にしてくれる。
いつもVimの標準機能による Ctrl+p で補完していたのだけど、ctrlp.vimを入れたので、タブキーの方が混乱が少なさそうだと思った。

dein.vimのTOMLで次のように設定した:

[[plugins]]
repo = 'ervandew/supertab'
hook_add = '''
  let g:SuperTabDefaultCompletionType = "<c-n>"
'''

参考記事

終わりに

一念発起して、ようやくNeoBundleから脱却できた。

今回入れたプラグインで、Vimによる作業効率がけっこう上がりそう。

Neovimも試そうかと思ったけど、今は自分にとってVimは補助エディタ的位置づけになっており、毎回サーバにNeovimをセットアップもやってられない気がするので、今回は見送った。

脚注