LoginSignup
14
9

More than 5 years have passed since last update.

Vim 8.0 Advent Calendar 10 日目 quickfix に追加された機能

Posted at

この記事は 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 が用意されています。

14
9
0

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
14
9