web-dev-qa-db-ja.com

Vimで一致する(ない)すべての行を非表示にする

ViまたはVimで一致するすべての行を表示/非表示にすることはできますか?ハイライトせずに、それらの行のみを表示します。

たとえば、Word the Word ERRORというテキストがあります。 ERRORを含む行のみを表示するにはどうすればよいですか?ERRORを含まない行のみを表示するにはどうすればよいですか?

解決策はありますか削除すべての一致する行を削除せずに元に戻すだけですか?

81
Alex Bolotov

:globalコマンドについて知っていますか?これはあなたが望むことをしますか?

:g/ERROR

そして反対の場合:

:g!/Error

または同等に:

:v/Error
98
user55400

ユースケースに応じた別のアプローチは、vimgrepquickfixの結果を使用することです。次のことができます。

:vimgrep pattern %は現在のファイルを検索し、最初の検索結果に移動します。さらに重要なことは、結果を「クイックフィックスリスト」に入れることです。

:copenは、個別のクイックフィックスウィンドウでクイックフィックスリストを開きます。したがって、最後のvimgrepのすべての行を含む別のウィンドウが表示されます。クイックフィックスウィンドウ内でEnterキーを押すか、行をダブルクリックして、元のファイルの対応する行にジャンプできます。

:colderを使用すると、古いクイックフィックスリスト(古いvimgrepの結果)に戻ることができます。 :cnewerは新しい検索結果に進みます。

:makeを実行すると、quickfixリストも更新されることに注意してください(エラーを修正するためにquickfixと呼ばれる理由です)。このため、「ロケーションリスト」と呼ばれるクイックフィックスリストの代替もあります。代わりに使用するには、:lvimgrepを使用してから、c接頭辞付きコマンドではなくl接頭辞付きコマンド-:lopen:lolder:lnewerを使用します。

もちろん、もっと多くのことができます。詳細については、:help quickfixを参照してください。

PS、あなたは、あなたがあなたがあなたがあなたがあなたがあなたがあなたがあなたがあなたがあなたがあなたが行を削除してそれからそれらを取り消すアプローチを望まないと言ったと言った。しかし、あなたがg/ERRORを答えとしてマークしたので、私はg!/ERROR/dを行うことで迅速かつ汚い方法を指摘すると思いました。その後、uを使用して簡単に元に戻すことができます。また、:set hlsearchを実行して、:gコマンドと一致するパターンを強調表示することもできます。

51
studgeek

使用できます

:g/ERROR/

eRRORですべての行を印刷するには

また、私は何度も見たが使用しなかったVimプラグインがあります: foldsearch:指定されたパターンに一致しない行を折り畳みます

37
Mykola Golubyev

これを行う最良の方法は、->

:vimgrep /something/g % | copen

これにより、キーワードに一致するリストが開き、quickfixウィンドウに一致した行のみが表示されます。

22
Shivendra

:vimgrep /something/g % | copen素晴らしい作品。また、:g/<pattern>/dを使用して、パターンのある行を削除できます。

2
sevvalai

おそらく、vip vim&/ pattern /のコマンドを意味し、/ pattern /を含む行を表示します(grepなど)。

0
charkh

たまたまfzfを使用する場合は、次を使用できます。

  • :Lines開いているすべてのファイル
  • :BLinesオープンバッファのみ
  • :Rg [pattern]ripgrepを使用
0
minusf