Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

概要

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

問題

上記の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! GoToPreviousWindowIfQfPresent() abort
  if!(empty(getqflist()))wincmdpendifendfunctionletg:quickrun_config = {
      \   "_": {
      \     "outputter/quickfix/open_cmd" : "cwindow | call GoToPreviousWindowIfQfPresent()"
      \   },
      \ }

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


Viewing all articles
Browse latest Browse all 5608

Trending Articles