2012年10月27日土曜日

[vim] PHPのエラー箇所をハイライトする

背景


前に、PHPのエラーをステータスラインに表示する設定をした。
[vim] phpファイルを保存するとき、エラーチェックして、エラーがあったらステータスラインを赤にする設定

 この状態で使ってて思った。
 ステータスラインに表示されても気づかない。。 

修正して、動かして見たらPHP Fatal Errorはかれてて、
ソースに戻って見たら、ステータスライン赤くなってる・・・。

無意味。

やっぱり、画面の下じゃなくて、画面の真ん中あたらを赤くしてくれないと気が付かない。
なんとかしなきゃ。


対処方法


① エラー時にsyntaxをoffにする。
やってみたけど、そんなにインパクトなかった。

② エラー箇所をハイライトする。
まぁ、こっちでしょう。 
errormarker.vimってのでもできるらしいが、 そんなに長く無いし、自分で書く。

phpでもerrormarker.vimをつかってflymakeしたい!

ソース


機能としては以下2点。
① エラー箇所をハイライト

ハイライトする。

② エラー箇所にジャンプ
spaceキーおしたら、そのエラー箇所にジャンプするようにしみてた。

またこれに伴って、エラー時のステータスラインに
ファイル名とか行番号とか表示指定してたのを外して、
エラーの内容のみを表示させるようにした。
縦分割するとき長すぎて全部入っていなかったので。




"----------------------------------------------------------+
" エラー行の背景色変更
"----------------------------------------------------------+

" キーバインドとautocmd設定
nnoremap  :call JumpToPHPError()
autocmd BufEnter,BufWritePost *.php call CheckErrorLine()

" エラー箇所にジャンプ
function! JumpToPHPError()
  silent! exe 'sign jump 99999 buffer='.winbufnr(0)
endfunction

" エラー箇所をハイライト
function! CheckErrorLine()

  " とりあえず消す.
  silent! exe 'sign unplace 99999 buffer=' . winbufnr(0)

  " チェックを実行(PHP)
  let l:tmp = system("php -l ".bufname(""))

  " エラーがあった場合
  if ! (l:tmp =~ "No syntax errors" )
      let s:line = matchstr(l:tmp,'on line \d\+')
      let l:line = split(s:line, 'line ')

     silent exe 'sign define PHPERROR text=>> linehl=ECOLOR texthl=ECOLOR'
     silent exe 'sign place 99999 line=' . l:line[1] . ' name=PHPERROR buffer=' . winbufnr(0)
     silent exe 'hi ECOLOR ctermfg=Yellow ctermbg=Red cterm=none'

     return
  endif

  return

0 件のコメント:

コメントを投稿