A Day in the Life

2008-07-29

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上でハイライトしてくれる。

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

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

:autocmd QuickFixCmdPost

でリスト表示。すると

--- Auto-Commands ---
errormarker  QuickFixCmdPost
   make      call SetErrorMarkers()

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

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

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

gitcore-tutorial 読書会\(^o^)/

んー。前半の object db 周りについては面白かったけど後半はさほど。fast forward merge が何者か解る(ただたんに commit id をマージ先と差し替えてるだけ)とか、merge の適用順序と 3-way merge が使われてるだとかその辺ぐらいかー。パブリッシュ方法なんかは別に知らなくても(今のままでも)なんら問題なかったかなー。

記事の一覧 >