今年の自分のvimrcを振り返る(2014)
長らくブログを放置していて、気がつけばAdventCalendarの季節も通りすぎて2015年になってしまいました。
去年は自分にとってVimの進歩があった年だったので、git log .vimrc
の中からTOP10をまとめてみました。
1位 実践Vim
- 作者: DrewNeil,新丈径
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2014/01/28
- メディア: Kindle版
- この商品を含むブログ (3件) を見る
今まで手に取らずに長いこと損をしていました...っ!
.による繰り返し、検索・置換のテクニック、マクロ機能などの小技が盛り沢山だっただけではなく、知らなかった設定も色々ありました。
中でも便利になった設定が以下の3つ
incsearch
set incsearch
今どきのGUIエディタのように/の検索中にマッチした部分にオートスクロールしてくれます。
Ctrl+pで履歴呼び出しにフィルタリング
cnoremap <C-p> <Up> cnoremap <C-n> <Down>
コマンド履歴の呼び出しを↑↓で行うと入力している文字で自動的にフィルタリングが行われますが、Ctrl+p, Ctrl+nによる履歴の呼び出しではフィルタリングが行われません。
ホームポジションから手を動かしたくないので、良いところどりをするためにCtrl+p, Ctrl+nを↑↓に割り当てます。
wildmenu
Vimのコマンドモードのtab補完はクソすぎると思っていたのですが、ちゃんと設定すれば補完メニューも出せるし、どこまで補完するのかも設定できます。
set wildmenu set wildmode=longest:full "コマンドモードの補完タイプ
自分の設定だと"Neo"まで入力してtabで補完するとこんな感じに表示されます。
2位 折り返しのあるテキストでもj,kで見た目のままカーソル移動可能に
nnoremap j gj nnoremap k gk
Vimのカーソル縦移動はデフォルトだと行単位での移動なので、画面の狭いノートPCで縦に2分割すると狙った場所にカーソルを移動させるのに苦労します。
この設定にしてからすこぶる快適になりました。
3位 Lua対応Vimに乗り換えた
Vim界隈ではアツいLuaですがLua対応VimはLinuxのパッケージマネージャでインストールできないので、開発環境を変えるときの移行が大変になりそうで手を出していませんでした。
Macならhomebrewで簡単にLua対応Vimを入れられるのと、第4位で紹介するneocompleteを前々から使ってみたかったこともありデフォルトのVimを捨てる決断をしました。
参考
4位 neocomplete
neocomplcacheよりも速いという噂は聞いていたのですが、環境によってはLua対応Vimをインストールするのが面倒なのと、neocomplcacheとの使い分けが大変そうで敬遠してました。
(MacとLinuxのどちらの環境でもNeoBundleInstall一発でVimの環境を整えたい)
実際に導入してみたところneocomplcacheとneocompleteの設定を別ファイルに分離して、簡単なif文でLua無しVimでは自動的にneocomplcacheにフォールバックさせることができました。
これで自宅以外の環境でデフォルトのVimを使う時でも特に意識することなく、NeoBundleInstall一発で環境構築できる手軽さを維持しています。
" Lua無しのときはneocomplcacheをインストール NeoBundle has('lua') ? 'Shougo/neocomplete' : 'Shougo/neocomplcache' " neocompleteがインストールされていなければenocomplcacheの設定を読み込む if neobundle#is_installed('neocomplete') source ~/dotfiles/.vimrc.neocomplete else source ~/dotfiles/.vimrc.neocomplcache endif
5位 PerlとXslate(TTerse)のスニペットを追加した
今年の4月に就職してPerlとテンプレートエンジンのXslateを使うことになったので、効率化のために自分で色々とスニペットを追加しました。
スニペットを自作する人はあまりいない印象なのですが、自分が使っているneosnippetは作るのはそれほど難しくないです。
テンプレートエンジン独自の構文はややこしい割に入力する機会が多いので、ネットで少し探して見つからなければ自作してしまった方がいいと思います。
6位 Unite.vimのfile_recを知った
Unite.vimは今まで導入しただけでろくにドキュメントも読んでいなかったので、ディレクトリ以下のファイルを再帰的に検索できるメチャ便利なfile_recの存在を知りませんでした。
趣味で作る簡単なウェブアプリでもフレームワークで決められた形にディレクトリを分けていると階層が深くなってしまうので、全ファイルから絞込み検索できるのは非常に便利です。
参考
7位 yankround.vim
YankRing.vimと同様に過去にヤンクした文字列を遡ってペーストできるプラグインです。
このプラグインのおかげでレジスタを指定してヤンク、ペーストをするということをしたことがありません。
YankRingよりも副作用が少ないことがウリらしいですが、自分はyankroundが最初だったのでそこら辺はあまり気にせずに使っています。
参考
副作用の少ないYankRing.vimみたいなのができました
8位 lightline.vim
powerline系(でいいのだろうか?)の導入は初めてで、この手のプラグインの中では後発で拡張性がありそうなlightlineを選びました。
ちなみに自分の環境だとこんな感じです。
まだほとんどカスタマイズしていなくて、デフォルトの設定からファイル名を相対パスに変更したぐらいです。
let g:lightline = { \ 'colorscheme': 'wombat' } let g:lightline.active = { \ 'left': [ [ 'mode', 'paste', 'modified' ], \ [ 'readonly', 'relativepath', 'modified' ] ], \ 'right': [ [ 'lineinfo' ], \ [ 'percent' ], \ [ 'fileformat', 'fileencoding', 'filetype' ] ] } let g:lightline.inactive = { \ 'left': [ ['modified'], [ 'relativepath' ] ], \ 'right': [ [ 'lineinfo' ], \ [ 'percent' ] ] } let g:lightline.tabline = { \ 'left': [ [ 'tabs' ] ], \ 'right': [ [ 'close' ] ] }
参考
lightline.vim作りました - プラグインの直交性について
9位 vim-fugitive
git操作は基本的にvimとは別のウィンドウで行っていますが、git blameを使うためだけに導入しました。
Gblameを使うとvim上での検索やシンタックスハイライトをそのままにgit blameの結果を見られるので非常に便利です。
Gblameのためだけでも導入する価値があると思いますが、git diffの結果をvim-diffで見られるGdiffも便利でした。
参考
VimmerなGit使いはfugitive.vimを今すぐ入れたほうがいい
10位 vim-watchdogs
今までシンタックスチェッカーにはsyntasticを使っていたのですが、非同期で実行できるvim-watchdogsを試験運用中です。
個人開発ではsyntasticで特に問題がなかったのですが、業務で扱うような巨大プロジェクトになると保存するたびにチェックだけで数秒待たされることが苦痛で我慢できなくなり、watchdogsに乗り換えてみました。
IDEのように常にチェックを走らせ続けることも可能なようですが、syntasticを使っていた時から保存時にエラーを教えてくれるだけで十分だったのでwatchdogsでも同じ設定にしました。
納得のいくハイライトの設定ができなかったのでエラー行の色を反転させてとりあえず使えるようにしただけですが、保存するたびに数秒固まる問題が解消され、機能的にsyntasticと比べて遜色ないのでとりあえず満足しています。
シンタックスチェックに時間がかかっている方は検討する価値があると思います。
" Perlのみ書き込み後にシンタックスチェックを行う let g:watchdogs_check_BufWritePost_enables = { \ "perl" : 1 \} execute "highlight watchdogs_highlight cterm=undercurl,reverse" let g:hier_highlight_group_qf = "watchdogs_highlight"
参考
以上、自分の2014年のvimrcの振り返りでした!
今年もvimをよろしくお願いします。