vim-jp / issues

有志で既知のバグや要望を検討・管理し、オフィシャルへの還元をしていきます。
https://vim-jp.org/
341 stars 11 forks source link

`vimgrep!` で、`!`指定でも、対象のファイルにジャンプする #1439

Open KSR-Yasuda opened 3 weeks ago

KSR-Yasuda commented 3 weeks ago

不具合の内容

vimgrep, lvimgrep, および そのadd系のコマンド で、 コマンドに ! を付けて実行すると、検索後のファイルジャンプ なし だったかと思います。

が、実施すると、!あり でも、検索後に ファイルジャンプしています。

外部の grepコマンドを使う grep だと、発生せず。 Vimの internal grep の vimgrep系 のみ で発生するようです。

現象・ログ

上記のとおり。

再現手順

% echo "a" > a
% echo "b" > b
# ファイル `a` をオープン
:e a

# カレント以下で、パターン `b` を検索
:vimgrep! /b/ ./*
# → ファイル `b` が引っ掛かる
# → ファイル `b` にジャンプする (NG)

期待動作

vimgrep系コマンドで、!指定 の場合に、検索結果に ファイルジャンプしない。

Vimのバージョン

9.1.785

OSの種類/ディストリ/バージョン

使用している or 関係していそうなプラグイン

(関係していそうなプラグインなどがあればココに書いてください)

その他

1415 vimgrep時の pwd関連の修正 をレポートしていました。

該当コマンドなので、関連があるかも。

mikoto2000 commented 3 weeks ago

vimgrep のヘルプを見ると、「先頭にジャンプしない」は検索フラグ j を使用するとなっています。 ! は、「カレントバッファの変更ををすべて破棄する」となっていました。

                    'j'  フラグ 'j' がない場合、Vim は最初のマッチへジャン
                        プする。'j' がある場合は quickfix リストが更新さ
                        れるだけである。[!] を付けるとカレントバッファに
                        対する変更は全て失われる。

https://vim-jp.org/vimdoc-ja/quickfix.html#:vimgrep より

mikoto2000 commented 3 weeks ago

grep の ! の挙動は、 Note に記載されているのですね...

Note: 検索結果へのリンク一覧を開くには :copen (:lgrep なら :lopen) が使 われる。:silent コマンドを使うことで grep の出力が画面いっぱいに表示されるの を防ぐことができる。:grep コマンドを ":grep!" 形式で使うと最初のマッチに自動 的にジャンプしなくなる。これらのコマンドを組み合わせて NewGrep コマンドを作る と次のようになる:

https://vim-jp.org/vimdoc-ja/quickfix.html#grep より

KSR-Yasuda commented 3 weeks ago

え、:vimgrep!の挙動、ジャンプ抑制じゃない!? 以前は、そう思って使ってたような…。

:vimgrep! で (ジャンプ時に) ファイル変更破棄、って、 :grep! の ジャンプ抑制 とも逆だし、危ない感じですね。

h-east commented 3 weeks ago

更に、'grepprg' オプションを internal にした時の :grep! の扱いは、:vimgrep! の扱い (カレントバッファの変更を破棄) だという紛らわしさ。 😅