vim pluginを探すときに便利なとこ

vim awesomeというpluginを集めたサイトを見つけた。現在15,000くらいのpluginを掲載しているようで、使っているユーザの多い順にランキングされている。
vimawesome.com

使っているユーザの判定はgithub上でdotfilesとして公開されている設定ファイルから、Bundleなどのplugin managerで参照されているものをカウントしているらしい。
いままでは適当にググって面白いのを探したりしていたが、ここを上から順に見ていくと楽そう

ちなみにplugin名の一部で検索をかけることもできるので目当てのものがあるときにも便利

surround.vimにドットコマンドを効かせる

surround.vimはカッコやクォートなどのペアを消したり置換したりできるコマンドを加えるplugin。ダブルクォートになっているものをシングルクォートにしたいことなどよくあるので便利。

複数箇所に同じ置換を行いたい場合、少数ならドットコマンドで繰り返し適用することが多いが、これはvimのデフォルトの機能しか認識してくれないためsurround.vimのコマンドなどには適用されない。

これを解消してくれるのがrepeat.vim
https://github.com/tpope/vim-repeat
ただ入れるだけでOK、私はdeinを使ってるのでこれだけ

[[plugins]]
repo = 'tpope/vim-repeat'
on_idle = 1

READMEを読むとsurround.vim以外にもいくつかのpluginに対応している模様
その中に地味に便利そうなpluginがあったのでもう一つ
https://github.com/tpope/vim-speeddating

これはCtrl-a, Ctrl-xの機能を拡張するpluginで、対応する文字列がdateのformatだった場合はそれに合わせてincrement, decrementしてくれるというもの。2016-10-29 00:00:00みたいな文字列の29を30にincrementしようとしてCtrl-aしたら28になったということは誰もが経験してるはず。

こちらのpluginもただ入れるだけでOKなので楽ちん

Neomake - 非同期実行のSyntastic

syntasticを使っていると大きなファイルでsyntax checkなどするとしばらく応答が返らないことがよくある。neovimには非同期でjobを実行する機能があり、それを活かしたpluginとしてNeomakeというsyntasticと同様の機能をもつものがあることを知ったので使ってみた

deinを使っていれば以下のような設定だけでOK

 [[plugins]]                               
 repo = 'neomake/neomake'                  
 hook_add = '''                            
 autocmd! BufWritePost * Neomake           
 '''                                       

ファイルを開いて最初にNeomakeを実行するときだけ一瞬固まるが、その後はNeomake実行時にもカーソルが動かせること確認できた
ちなみにvimでも動くが非同期実行はできない

デフォルトの設定ではerrorを見つけた際もlocation listが開かないので:lopenを使う
もしくは以下の設定を入れれば自動で開くようになる

let g:neomake_open_list = 2

syntasticと同じく、:NeomakeInfoで現在どのmakerが有効なのか確認できる(makerとはsyntasticで言うcheckerのこと)

また、makerのカスタマイズもsyntasticと同様の形でできる

"let g:neomake_{ filetype }_{ makername }_maker
let g:neomake_javascript_jshint_maker = {
    \ 'args': ['--verbose'],
    \ 'errorformat': '%A%f: line %l\, col %v\, %m \(%t%*\d\)',
    \ }
let g:neomake_javascript_enabled_makers = ['jshint']

errorを示すsignの変更も可能
もちろんwarningやinfoなども別々に可能

let g:neomake_error_sign = {
  \ 'text': 'E',
  \ 'texthl': 'ErrorMsg',
  \ }

詳しくはhelpで

参考