9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VimAdvent Calendar 2022

Day 18

QuickFix を自動で伸縮する(他、色々)

Last updated at Posted at 2022-12-17

Vim(2) Advent Calendar 3 個目です。QuickFix ウィンドウを使う時に便利な小さなプラグインを作りました。

名前の通りこれは Neovim 用なのですが、一応、大昔に作った Vim 版もあります(ただし一部機能が未完成)。

これは何?

Kapture 2022-12-15 at 21.05.00.gif

動画の通り、QuickFix ウィンドウを内容に応じて伸縮してくれるプラグインです。QuickFix ウィンドウに入った時と Neovim 自体の大きさが変わった時に、内容行から計算していい感じの行数に調整してくれます。QuickFix の行数を求めるなら単純に getqflist() から可能なのですが、set wrap してると狭いウィンドウで行が折り返してしまうので、それを含めて高さを計算しているのがミソです。

これだけでは何なので……

ネタ的にこれだけだと何なので、更に小ネタも載せておきます。

Git の差分を QuickFix に突っ込む

lewis6991/gitsigns.nvim のメイン機能はファイルの中で Git の差分を分かり易く表示してくれるものなのですが、setqflist / setloclist 関数を使うと QuickFix ウィンドウに結果を放り込んでくれます。この画像では HEAD との差分を表示しています。

これは QuickFix 全般の話になるのですが、QuickFix ウィンドウ使うならkevinhwang91/nvim-bqfは是非入れておきましょう。上記の画像ではすでに使っていますが、QuickFix ウィンドウにプレビュー画面を付け、カーソルの動きに合わせて順次表示してくれます。

ただちょっとこのプラグイン、QuickFix ウィンドウで自動的に set nowrap しちゃうんですよね…… 拙作 delphinus/qfheight.nvim の意義が半減しちゃうのが残念(あとで issue 立てておこう)。

更に、PR のレビューではこれに加えて tpope/vim-fugitive を使います。

コマンド 意味
Git diff main main ブランチとの差分を QuickFix ウィンドウに入れる
Gitsigns change_base main true gitsigns の差分は main からの差分にする
Gitsigns diffthis main 新旧のファイルを左右に開いて見比べる
Gitsigns reset_base サインの状態を元に戻す

これらのコマンドを適当なキーにマッピングしておくとレビューが捗ります。

ドキュメント読んだのですが Git difftool に当たるコマンドが lewis6991/gitsigns.nvim に見当たりませんでした。一応 issue も立てておいたのですが(lewis6991/gitsigns.nvim#692)、反応してくれるかな?

更に更に、このように QuickFix ウィンドウを渡り歩くなら tpope/vim-unimpaired もお勧めです。このプラグインを入れると QuickFix 用に様々なマッピングが定義されます。

マッピング コマンド 意味
[q :cprevious 前の差分へ
]q :cnext 次の差分へ
[Q :cfirst 最初の差分へ
]Q :clast 最後の差分へ
[<C-q> :cpfile 前のファイルへ
]<C-q> :cnfile 次のファイルへ

などなど。詳しくはヘルプを見てください。他にも色々定義されますので、煩わしければ自分で必要な分だけ定義してあげても良いですね。

Telescope の結果を QuickFix に突っ込む

みんな大好き nvim-telescope/telescope.nvim<C-q> を押すと、結果を QuickFix ウィンドウに放り込むマッピングをデフォルトで定義してくれます。

Kapture 2022-12-16 at 17.55.43.gif

この例では Telescope live_grep の結果を <C-q> で QuickFix ウィンドウに突っ込んでいます。Telescope は検索結果から更に絞り込むようなことは自由にできないので、この機能は大変重宝しています。また、この状態で再び Telescope を開始できますから、検索結果を一次的にストックするような用途にも使えますね。


以上、QuickFix ネタとしてはすでに @YuseiUeno さんが書かれていたのですが、そこに無いネタとして挙げさせていただきました。

Vim(2) Advent Calendar には以下の 2 記事も書いているので是非読んでみてください。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?