この記事は Vim 8.0 Advent Calendar の 10 日目の記事です。
Vim 8.0 では quickfix 周りに便利な機能が追加されました。
quickfix の各項目の場所で Ex コマンドを実行する
quickfix の各項目に対して Ex コマンドを実行する :cdo
Ex コマンドが追加されました。この Ex コマンドを使うことで、quickfix に対する柔軟な操作が可能になります。
例えば、プロジェクトの中から単語 foo
を探し、それらを全て bar
に書き換えるには以下のようにします。
" 単語 foo を探します。結果は quickfix に入ります。
:vimgrep /\<foo\>/ **/*
" 検索結果の各行にて、置換を行い、バッファを保存します。
:cdo s/\<foo\>/bar/g | update
quickfix 内の各ファイルで Ex コマンドを実行する
上記の例において、検索結果の各ファイルについて複数の結果のデータがある場合に、各ファイルについて何か処理がしたい場合があるかもしれません。この場合に :cdo
を使ってしまうと、各ファイルにて結果のデータの数だけ処理が実行されてしまいます。
こういった場合のために、cfdo
Ex コマンドも追加されています。こちらの Ex コマンドは、quickfix に存在している各ファイルについて繰り返しが行えます。
各ファイルが開かれた際のカーソル位置は、ファイル内の最初の quickfix の項目の位置になります。
quickfix の一番下にスクロールする
Vim の非同期機能が強化されたため、今後は quickfix の内容が非同期で更新されることもあるでしょう。そういった場合に、常に quickfix の一番下の内容が見たい場合もあります。
新しく追加された :cbottom
Ex コマンドを実行すると、quickfix ウィンドウへ移動しなくても、quickfix ウィンドウの内容を一番下までスクロールさせることができます。
quickfix の履歴を参照する
quickfix の内容は、最新の 10 個まで履歴が保存されていて、以前の内容に戻すことができます。詳細は :help quickfix-error-lists
に記載されています。
この機能は、以前までは実際に :colder
などを実行して前に戻ってみないと古いものが存在するかどうかがわかりませんでした。
そこで追加されたのが :chistory
Ex コマンドです。この Ex コマンドを実行すると、quickfix にどのような履歴があり、現在どれが参照されているのかが以下のように表示されます(以下は help からの抜粋です)。
error list 1 of 3; 43 errors
> error list 2 of 3; 0 errors
error list 3 of 3; 15 errors
ロケーションリスト版
上記の Ex コマンド :cdo
:cfdo
:cbottom
:chistory
はそれぞれ、ロケーションリスト版として :ldo
:lfdo
:lbottom
:lhistory
が用意されています。