今更だけどNeoBundleからdein.vimに乗り換えて、プラグインを6つ追加した
はじめに
本当に今更である。
NeoBundleやdein.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 CodeやIntelliJ 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_command
でVimの globpath()
の代わりに使うコマンドを定義できる。
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
でも問題なさそうだった。
操作例は下のリンク先を参照。
参考:
- vim-operator-replaceでコピペを簡単に - 僕のYak Shavingは終わらない
- Vim Plugins | progrhyme's Tech Notes#yankroundvim
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をセットアップもやってられない気がするので、今回は見送った。