ひよっこ。

I want to…

vimでnodelintを有効化してQuickfixを活用する

Posted by hikaruworld : 2012 5月 3

最近触っていなかったnodeを触ろうと思って、vimの構成を少し弄っていました。
当時はjslintでやっていたvalidationを、nodelintでやってflymakeしよう思い
Vimでnode.jsの文法チェック(nodelint編)』を参考に設定を調整してたんですが、
ちょっとハマッたのでメモしておきます。

なお、以下のバージョンで構築しています。

OS MacOSX(SnowLeopard)
vim MacOSX(SnowLeopard)デフォルトの7.2.108
errormarker.vim Version 0.1.13
node 0.7.8
nodelint 0.6.1

errormarker.vimとnodelintの導入

とにかく、上記サイトに従ってerrormarker.vimとnodelintを導入します。
nodelintの設定まではここでは行いません(npm install -g nodelintまで)。
なお自環境との違いは、homebrewではなくてnaveベースなことです。

nodelintの設定変更

自分の確認したnodelint 0.6.1では、–reporterという引数でnodelintの出力形式が指定できるようです。

以下のコマンドでデフォルトで提供される出力形式が確認できます。

nodelint --list-reporters

以下、出力結果です。

Build-in reporters: 
* default: Default reporter
* idea: IDEA reporter
* textmate_full: Textmate full HTML reporter
* textmate_summary: Textmate full HTML reporter
* vim: VIM syntastic reporter
* xml: XML reporter

ご丁寧にvimの出力形式が準備されているのでありがたく使わせて頂きましょう。
ただ、ちょっとだけ出力形式が見づらいので修正します。

実際のvim用のreporterファイルは以下にあります。
$NODE_PATH/../node_modules/nodelint/lib/reporters/vim.js
変更内容は以下です。半角スペース入れて、文字列を一部切り詰めます。

41c41
<       str += file  + 'line ' + error.line +
---
>       str += file  + ' line ' + error.line +
43c43
<         ' Error: ' + error.reason + ' ' +
---
>         ' E: ' + error.reason + ' ' +

errormarkerの設定

基本的には参考サイトの通りですが、–reportersの設定を追加する事とerrorformatの設定を変更します。
あと、自分の場合は、$HOME/.vim/bundle/errormarker/ftplugin/javascript/flyquickfixmake.vimになります。

setlocal makeprg=$NODE_PATH/../../bin/nodelint\ --config\ $NODE_PATH/../node_modules/nodelint/config.js\ --reporter\ $NODE_PATH/../node_modules/nodelint/lib/reporters/vim.js\ %
" main.js line 2 column 1 E: ......
setlocal errorformat=%f\ line\ %l\ column\ %c\ %t:\ %m

if !exists("g:javascript_flyquickfixmake")
    let g:javascript_flyquickfixmake = 1
    au BufWritePost *.js silent make
endif

いくつか補足をば。
* makeprgの指定に関しては、naveを利用している都合上都度変更されるため、$NODE_PATHを基点に定義しています。
* –reporterに関しては既に記述した通りです。
* config.jsはインストール時のまま特に弄っていません(参考サイト通りに変更していません)。
* errorformatは–reporter vim.jsの出力形式にあわせています。
* make処理は一々表示して欲しくないのでsilentにしています。

.vimrcの設定

一部.vimrcの設定も変更しました。

" 保存時にerrormaker.vimでCUIの画面がぶれるので、いったん再描画する
autocmd QuickfixCmdPost make redraw!
" quickfixに対象が存在した場合に自動起動する用に設定
autocmd QuickfixCmdPost make if len(getqflist()) != 0 | copen | endif
" quickfixに対象が存在しなかった場合に自動で閉じるように設定
autocmd QuickfixCmdPost make if len(getqflist()) == 0 | cclose | endif

以上です。

参考にしたサイト

それマキ(それ今mackeeがやってるよ)
vimdoc-jar quickfix

おまけ

そういえば、:signが有効になんないんですよね。

E319: Sorry, the command is not available in this version

とか言って怒られますorz…

コメントを残す