watchdogs.vim で、文法エラーがあったときに QuickFix にフォーカスを奪われる

タイトルの通りですが, 文法エラーがでるとフォーカスを奪われて面倒だったので,
なにも考えずに lingr で聞いてみた

syngan
こんばんわ。
watchdogs 使っていて、文法エラーがあると quickfix にフォーカス奪われるんですが
奪われないようにすることってできますか?

http://lingr.com/room/vim/archives/2013/01/19#message-13586930

manga_osyo
syngan:g:quickrun_config の設定とか教えてもらえると助かります!

http://lingr.com/room/vim/archives/2013/01/19#message-13589317

manga_osyo
syngan:とりあえず
:WatchdogsRun -hook/back_window/enable 1 -hook/back_window/enable_exit 1
で元のウィンドウへ戻ることが出来ます。
ただし、:WachdogsRun を実行した時とウィンドウレイアウトが違っている場合は正しく動作しないので注意して下さい。

http://lingr.com/room/vim/archives/2013/01/19#message-13589729

試してみたけど, 改善されなかった.

んで, 色々調べてみた結果の報告.
結論は, 某有償ソフトを利用する場合にのみ発生することがわかった.

取り合えず再現する .vimrc. 某ソフトは事情により "hoge" に変更.

"#################################################################
" neobundle {{{
"#################################################################

set nocompatible               " be improved
filetype off                   " required!
filetype plugin indent off     " required!

if has('vim_starting')
	set runtimepath+=~/.vim/bundle/neobundle.vim/
	call neobundle#rc(expand('~/.vim/bundle/'))
endif

NeoBundle 'https://github.com/Shougo/vimproc', { 'build' : {
	\	 'unix' : 'make -f make_unix.mak',
	\	 'cygwin' : 'make -f make_cygwin.mak',
	\	 'mac' : 'make -f make_mac.mak',
	\	},
	\}
NeoBundle 'https://github.com/thinca/vim-quickrun.git'

" http://d.hatena.ne.jp/osyo-manga/20121005/1349363320
NeoBundle "https://github.com/osyo-manga/vim-watchdogs",
	\ {'depends' : [ 'https://github.com/osyo-manga/osyo-manga/shabadou.vim']}

filetype plugin on
filetype indent on
" }}}

set fileencoding=japan
set fileencodings=iso-2022-jp,euc-jp,utf-8,cp932

"#################################################################
" quickrun {{{
"#################################################################
let g:quickrun_config = {
\   "watchdogs_checker/_" : {
\		"hook/copen/enable_exist_data" : 1,
\   },
\}
let g:quickrun_config["watchdogs_checker/hoge"] = {
\	"command"   : "hoge",
\	"exec"      : "%c %o -P %s:p",
\}
let g:quickrun_config["hoge/watchdogs_checker"] = {
\	"type" : "watchdogs_checker/hoge",
\}
" }}}

"#################################################################
" watchdogs {{{
"#################################################################
let g:watchdogs_check_BufWritePost_enable = 1
let g:watchdogs_check_CursorHold_enable = 0
call watchdogs#setup(g:quickrun_config)
" }}}

入力ファイル "/tmp/a.hoge"


if

ふつうに実行したときのエラーメッセージ. (標準出力に出力される)

on line 4 of "/tmp/a.hoge", syntax error, ....
quit
   ^

これで "/tmp/a.hoge" を保存するとフォーカスが quickfix に奪われる.

試したこと

  • 他のファイルタイプ(たとえば .sh とか)では発生しない.
  • 以下のように .vimrc を変更して
let g:quickrun_config["watchdogs_checker/hoge"] = {
\	"command"   : "a.sh",
\	"exec"      : "%c %o -P %s:p",
\}

以下のように同じメッセージを出力する a.sh を作成する.

echo 'on line 4 of "/tmp/a.hoge", syntax error, ....'
echo 'quit'
echo '   ^'

すると, フォーカスは奪われない.

  • filetype=tako で hoge を実行するようにさせると, フォーカスを奪われる.
let g:quickrun_config["watchdogs_checker/tako"] = {
\	"command"   : "hoge",
\	"exec"      : "%c %o -P %s:p",
\}
let g:quickrun_config["tako/watchdogs_checker"] = {
\	"type" : "watchdogs_checker/tako",
\}

んで

  • どうすんべ.
  • errorformat でダブルクォートで囲まれたファイル名を指定するにはどうしたらいいでしょうか?
    • '"%f"' とか '\"%f\"' とかではうまいこと解析されていない感じがする.