🐼

忘れられないQuickfix

2023/10/25に公開1

quickfixは、かしこくて、いつもみんなにたよりにされています。
こまっている友だちは、だれでも、きっと助けてあげるのです。

それに、たいへん年をとっていて、知らないバグはないというぐらい、安定していました。

quickfixは、死ぬことをおそれてはいません。
死んでquickfixがなくなっても、historyはのこることを知っていたからです。
だから、前のように検索結果が消えてなくなっても、くよくよしたりしませんでした。

quickfixって辿れる

getqflist() 関数は、引数でnrの指定を受けることで過去のquickfixlistを返してくれます。

:let oldest = getqflist({"nr": 1, "title": v:true, "items": v:true})

nrには最大10を指定でき、つまり10回分の履歴を遡ることができます。

:let newest = getqflist({"nr": 10, "title": v:true, "items": v:true})

この番号を:chistoryで指定することで、現在のquickfixに表示するリストをその番号で指定したものに変更できます

:3chistory

なので、例えばこんなコマンドを用意しておくと、直近のquickfixの結果をもう一度表示することが簡単にできたりします。

function s:show_qf_titles()
  let l:qnr = 1
  while qnr <= 10
    let l:list = getqflist({"nr": qnr, "title": v:true})
    if l:list["nr"] > 0
      echo l:qnr .. ": " .. l:list["title"]
    endif
    let l:qnr = l:qnr + 1
  endwhile
endfunction
command! ShowQfTitles call <sid>show_qf_titles()

使うとこんな感じで番号とquickfixのtitleが表示されます。

1: vimgrep foo ./articles/*
2: vimgrep bar ./articles/*
3: make

遡って見たいものを:chistoryで指定し、:copenで開くことができます。

:1chistory
:copen

ちなみに、telescope.nvimであれば:Telescope quickfixhistory、ddu.vimであれば拙作のddu-source-quickfix_historyなどを頼るのも良いと思います。

脚注
  1. これが最古というわけではないです。私の調査力ではURLの貼れる出典をここまでしか遡れなかっただけ。 ↩︎

Discussion

kyoh86kyoh86

この記事を公開してすぐに

私は素直(?)に :colder で遡っちゃう。行き過ぎたら :cnewer

との指摘をいただきました。
これは僕のミスですね。僕もたいていの場合はこの2つで済ませてます。