Hatena::Groupsubtech

#生存戦略 、それは

-> 08 { 07 / 29 }

errormarker.vim で flymake(Emacsの) る

16:13 | はてなブックマーク - errormarker.vim で flymake(Emacsの) る - #生存戦略 、それは

f:id:secondlife:20080729161246p:image

id:antipop(Emacs厨)が flymake 便利すぎというか無い vim ってなんなの(笑)と行ってきたのでそれっぽいのを探したけど flymake.vim はちょっと違うんだよなぁ(quickfix厨)、まぁとりあえず保存時に f*ck してquickfix に自動表示でいいか、と思ったらあれなんか flymake(Emacsの)ぽい挙動を示してビビル!なんぞこれー、というわけで弊社vimチーム(俺motetnx)でチェックしたら

の errormarker.vim が QuickFixCmdPost にフックして、まんま flymake ぽい挙動をしてくれるという事が解った。quickfix 利用なためどんな言語からも使えるよ!errormarker++。ちなみに一年ぐらい前に割と便利げ(しかもtypo)と書いておきながら存在をすっかり忘れていたという。

ちなみに perl で errormarker.vim で flymake っぽく利用する設定。まず

$VIMRUNTIME/tools/efm_perl.pl

を適当にパスが通った場所にコピー。サンプルでは vimparse.pl という名前になってるのでリネームする。んで ~/.vim/ftplugin/perl/flyquickfixmake.vim

setlocal makeprg=$HOME/bin/vimparse.pl\ -c\ %\ $*
setlocal errorformat=%f:%l:%m
setlocal shellpipe=2>&1\ >

if !exists("g:perl_flyquickfixmake")
  let g:perl_flyquickfixmake = 1
  au BufWritePost *.pm,*.pl,*.t silent make
endif

とか書いておく。すると perl なファイルの保存時にエラー箇所をvim上でハイライトしてくれる。

<inc>最初の書き方だとperlなft開くたびにBufWritePost のフックに追加されてしまってたので変更。


おまけメモ・vim でフックされた関数の実態を探す方法(by motemen)。

:autocmd QuickFixCmdPost

でリスト表示。すると

--- Auto-Commands ---
errormarker  QuickFixCmdPost
   make      call <SID>SetErrorMarkers()

それっぽいのが出てくる。次にその関数を verbose で調べる。

:99verbose function /SetError
function <SNR>50_SetErrorMarkers()
        Last set from ~/svn/dotfiles/vim/.vim/plugin/errormarker.vim

で定義した vimscript が解る、と。

spiritloosespiritloose2008/07/31 11:43おお!これは知りませんでした。便利ですね。
ちなみに vimparse.pl に「-c」オプションはいりませんか?
-c なしだと実行されてしまうようです。

secondlifesecondlife2008/07/31 11:45あ、手元のコードだと -c つけてます。ので修正しました。

spiritloosespiritloose2008/07/31 12:04どうもです!