はじめに
本記事は Vim Advent Calendar 2012 の 146 日目のエントリになります。
前回は、おしょーさん(id:osyo-manga)による Vim の map でコマンドを展開させた場合に任意の位置にカーソルを持ってくる - C++でゲームプログラミング でした。これはいいものだ...。
さて、そんなおしょーさんが 139 日目 のエントリにて qmake を使った Qt のビルドと実行について解説されていました。
同じように、Vim を使っていると突然 QML を実行したい!と思うこともあると思います。そこで Vim から qmlscene で QML を実行して GUI を表示する quickrun の設定を書いてみました。
Qt をやったことがない人でも、「あれ?エディタって全部 Vim で良いんじゃない?」と感じとって貰えればと思います。
設定
let g:quickrun_config['qml/qmlscene'] = { \ 'command' : 'qmlscene', \ 'exec' : '%c %s:p', \ 'runner' : 'vimproc', \ } let g:quickrun_config['qml'] = g:quickrun_config['qml/qmlscene']
qmlscene にファイル名を渡すだけなのでこれだけです。とても簡単ですね。
エラー箇所を表示してみる
出力先である quickfix の errorformat を指定してあげる事で、コンパイル時にエラー箇所をハイライトさせることができます。ハイライトさせるためにはエラー出力の形式を指定して、何行目がエラーを起こしているのか特定してあげる必要があります。
例えば間違って「;」をブロックの直後に指定してしまった場合、以下の様なエラーが qmlscene によって出力されます。
file:///Users/hecomi/ProgramLocal/Qt/QtQuickTest/QtQuickTest.qml:15 Unexpected token `;'
エラーの形式を見ると、
file://(ファイルのパス):(行数) (エラーの内容)
となっていることが分かります。これを quickrun の設定に書いてあげます。
let g:quickrun_config['qml/qmlscene'] = { \ 'command' : 'qmlscene', \ 'exec' : '%c %s:p', \ 'runner' : 'vimproc', \ 'quickfix/errorformat' : 'file:\/\/%f:%l %m', \ }
実行すると以下のようにエラーがハイライトされます。
その他の指定形式については、:h errorformat をご参照下さい。
watchdogs.vim でエラーをチェックする
watchdogs.vim は syntastic の様にファイルの保存時などにシンタックスチェックを行える plugin です。
- GitHub - osyo-manga/vim-watchdogs: Async syntax checking.
- watchdogs.vim つくりました - C++でゲームプログラミング
- GitHub - vim-syntastic/syntastic: Syntax checking hacks for vim
syntastic と異なり、チェックを非同期で行なってくれるのでとても快適ですし、文法も quickrun と同一なので学習コストも低く済みます。
qmlscene には --quit という実行後すぐに終了してくれるオプションがあるので、コレを利用して文法チェックを行うことにします。
let g:quickrun_config['qml/watchdogs_checker'] = { \ 'type' : 'watchdogs_checker/qmlscene', \ } let g:quickrun_config['watchdogs_checker/qmlscene'] = { \ 'command' : 'qmlscene', \ 'exec' : '%c %o %s:p', \ 'cmdopt' : '--quit', \ 'quickfix/errorformat' : 'file:\/\/%f:%l %m', \ } call watchdogs#setup(g:quickrun_config) let g:watchdogs_check_BufWritePost_enables = { \ "qml" : 0, \ } nnoremap <Leader>R :WatchdogsRun<CR>
g:watchdogs_check_BufWritePost_enables['qml'] を 1 にすると保存時にシンタックスチェックが走るようになりますが、一瞬ウィンドウが開いてしまうので、明示的に :WatchdogsRun を呼ぶと実行されるようにしています。これで「\R」と入力すれば、シンタックスチェックのみ行えるようになりました。
(おまけ)QML のシンタックスハイライト
NeoBundleLazy 'peterhoeg/vim-qml', { \ 'autoload' : { \ 'filetypes' : ['qml'], \ }, \ }
おわりに
quickrun を利用してあげれば、ターミナルから実行できることはひと通り実行できるので、色々な設定を書いてみて皆で共有して、Vim に満ちた世界が早く来て欲しいですね!