watchdogs.vim で、文法エラーがあったときに QuickFix にフォーカスを奪われる
タイトルの通りですが, 文法エラーがでるとフォーカスを奪われて面倒だったので,
なにも考えずに lingr で聞いてみた
syngan
http://lingr.com/room/vim/archives/2013/01/19#message-13586930
こんばんわ。
watchdogs 使っていて、文法エラーがあると quickfix にフォーカス奪われるんですが
奪われないようにすることってできますか?
manga_osyo
http://lingr.com/room/vim/archives/2013/01/19#message-13589317
syngan:g:quickrun_config の設定とか教えてもらえると助かります!
manga_osyo
http://lingr.com/room/vim/archives/2013/01/19#message-13589729
syngan:とりあえず
:WatchdogsRun -hook/back_window/enable 1 -hook/back_window/enable_exit 1
で元のウィンドウへ戻ることが出来ます。
ただし、:WachdogsRun を実行した時とウィンドウレイアウトが違っている場合は正しく動作しないので注意して下さい。
試してみたけど, 改善されなかった.
んで, 色々調べてみた結果の報告.
結論は, 某有償ソフトを利用する場合にのみ発生することがわかった.
取り合えず再現する .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\"' とかではうまいこと解析されていない感じがする.