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


87

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

たとえば、単語が単語であるテキストがありますERROR。含むERROR行のみを表示する方法と、含まない行のみを表示する方法を教えてくださいERROR

一致するすべての行を削除してから元に戻すことなく解決策はありますか?


回答:


109

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

:g/ERROR

反対の場合:

:g!/Error

または同等に:

:v/Error

19
これはあまり良くありません。一番下までスクロールすると、コマンドが終了し、すべてが再び表示されます。それらの内容を実際に隠しているわけではありません。
Kan Li

@KanLiを押してg<もう一度確認するか@:、実行してコマンドを実行していない場合。
D.ベンKnoble

53

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

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

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

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

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

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

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


1
受け入れられた答えよりも「:g!/ ERROR / d」に関するヒントをありがとう。
VinGarcia 2017

パターンに一致しない線でこれを行うことはできますか?
ジャックトース


26

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

:vimgrep /something/g % | copen

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

現在のファイルを考慮しない場合は、%をファイルへのパスに置き換えます。


1
現在のファイルを考慮しない場合は、%をファイルパスに置き換えます。
シヴェンドラ2015

パターンに一致しない線でこれを行うことはできますか?
ジャックトース

1

:vimgrep /something/g % | copen素晴らしい作品。また、:g/<pattern>/dパターンの削除ラインに使用することができます


これは、この質問に対するまったく別の答えです。
シヴェンドラ

1

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

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

1

これを行うためのいくつかのハックの汚い方法:

:w (save)
ggdG (deletes everything)
:.!grep something % (replace current line with grep output)

0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.