LoginSignup
6
7

More than 5 years have passed since last update.

vim-watchdogsでエラーをquickfix listに出した後、カーソルをquickfix listのウィンドウに移動させない

Last updated at Posted at 2015-12-16

概要

vim-watchdogsというプラグインを使っていて気になった、掲題の問題を設定で頑張って回避した、というお話です。

修正事項

vim-quickrunの仕様が変わり、こちらの設定は不要になりました(関連すると思しき修正: dbfadf7b56b6)。
更新しましょう! :arrow_up:
@thinca さんありがとう!

問題

上記のvim-watchdogsというプラグイン、
設定するとファイルを保存した時に自動でチェック用のコマンドを非同期で実行し、結果をquickfix listなどに出してくれるという優れものです。
syntasticの非同期実行版といえば通じる方もいらっしゃるでしょう。
私はこのvim-watchdogsで、比較的実行時間が長くかかるRubocopやESLintを実行しているのですが、一つ困った問題がありました。

コマンドの実行結果がquickfix listに表示された後、quickfix listにカーソルが意図せず飛んでしまうのです。
実際にはそれ自体は仕様なのですが、私の利用環境では次のような問題がありました。

  1. :weary: 既存の大抵のファイルにおいて保存時に大量にエラーが出てしまうため、優先して編集したいことに集中できない。
    • プロジェクトのコードベースが大きくなってからRubocopを導入したので...。
  2. :weary: しかもそれが非同期に発生するため「とりあえず一旦保存する」=>「他の箇所を編集」している間にカーソルがquickfix listに飛び、ますますイラッとくる。

解決方法

vim-watchdogsが依存している、vim-quickrunの設定をいじりました。
:point_down: のように変えましょう。

.vimrc
function! GoToPreviousWindowWhenQf() abort
  if &filetype == 'qf'
    wincmd p
  endif
endfunction
let g:quickrun_config = {
      \   "_": {
      \     "outputter/quickfix/open_cmd" : "cwindow | call GoToPreviousWindowWhenQf()"
      \   },
      \ }

私が探した限りドキュメントには見当たらなかったのですが、outputter/quickfix/open_cmdという箇所に、
コマンドを実行した後、quickfix listを開くときのコマンドを設定できるようです(デフォルトはcwindow)。
なので、デフォルトのcwindowコマンドでquickfix listを開い(て、カーソルをquickfix listに移動させ)た後、
wincmd pコマンドで移動させる前のウィンドウに戻るよう設定しました。
GoToPreviousWindowWhenQfではwincmd pを実行する前に、現在のバッファーがquickfix listか確認しています。
そうしないとエラーがなかった時にウィンドウを複数開いていた場合、無関係なウィンドウに移動してしまうので。

6
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7