Kesin's diary

プログラミングの記事がメインです

今年の自分のvimrcを振り返る(2014)

長らくブログを放置していて、気がつけばAdventCalendarの季節も通りすぎて2015年になってしまいました。
去年は自分にとってVimの進歩があった年だったので、git log .vimrcの中からTOP10をまとめてみました。

2014年時点での.vimrc

1位 実践Vim

今まで手に取らずに長いこと損をしていました...っ!
.による繰り返し、検索・置換のテクニック、マクロ機能などの小技が盛り沢山だっただけではなく、知らなかった設定も色々ありました。
中でも便利になった設定が以下の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で補完するとこんな感じに表示されます。

f:id:Kesin:20150103213921p:plain

2位 折り返しのあるテキストでもj,kで見た目のままカーソル移動可能に

nnoremap j gj
nnoremap k gk

Vimのカーソル縦移動はデフォルトだと行単位での移動なので、画面の狭いノートPCで縦に2分割すると狙った場所にカーソルを移動させるのに苦労します。
この設定にしてからすこぶる快適になりました。

3位 Lua対応Vimに乗り換えた

Vim界隈ではアツいLuaですがLua対応VimLinuxのパッケージマネージャでインストールできないので、開発環境を変えるときの移行が大変になりそうで手を出していませんでした。
Macならhomebrewで簡単にLua対応Vimを入れられるのと、第4位で紹介するneocompleteを前々から使ってみたかったこともありデフォルトのVimを捨てる決断をしました。

参考

homebrewで最新のvim7.4をインストールする方法

4位 neocomplete

neocomplcacheよりも速いという噂は聞いていたのですが、環境によってはLua対応Vimをインストールするのが面倒なのと、neocomplcacheとの使い分けが大変そうで敬遠してました。
(MacLinuxのどちらの環境でも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の存在を知りませんでした。

趣味で作る簡単なウェブアプリでもフレームワークで決められた形にディレクトリを分けていると階層が深くなってしまうので、全ファイルから絞込み検索できるのは非常に便利です。

参考

Unite.vimドキュメントのfile_rec項

7位 yankround.vim

YankRing.vimと同様に過去にヤンクした文字列を遡ってペーストできるプラグインです。
このプラグインのおかげでレジスタを指定してヤンク、ペーストをするということをしたことがありません。
YankRingよりも副作用が少ないことがウリらしいですが、自分はyankroundが最初だったのでそこら辺はあまり気にせずに使っています。

参考

副作用の少ないYankRing.vimみたいなのができました

8位 lightline.vim

powerline系(でいいのだろうか?)の導入は初めてで、この手のプラグインの中では後発で拡張性がありそうなlightlineを選びました。
ちなみに自分の環境だとこんな感じです。

f:id:Kesin:20150103214254p:plain

まだほとんどカスタマイズしていなくて、デフォルトの設定からファイル名を相対パスに変更したぐらいです。

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の結果を見られるので非常に便利です。

f:id:Kesin:20150103214306p:plain

Gblameのためだけでも導入する価値があると思いますが、git diffの結果をvim-diffで見られるGdiffも便利でした。

f:id:Kesin:20150103214316p:plain

参考

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"

参考

[vim]watchdogs.vim つくりました


以上、自分の2014年のvimrcの振り返りでした! 今年もvimをよろしくお願いします。