Hide all (not)matching lines in Vim
Solution 1:
Do you know about the :global
command? Does this do what you want?
:g/ERROR
and for the opposite:
:g!/Error
or equivalently:
:v/Error
Solution 2:
Another approach depending on your use case would be using vimgrep and its results in quickfix. You can do the following:
:vimgrep pattern %
will search the current file and take you to the first search result. More importantly it also puts the results in the "quickfix list".
:copen
will then open the quickfix list in a separate quickfix-window. So you will have a separate window with all lines from your last vimgrep. Inside the quickfix-window you can then hit Enter or double-click on a line to jump to the corresponding line in your original file.
:colder
will let you go back to older quickfix lists (older vimgrep results). And :cnewer
goes forward to newer search results.
Note that the quickfix list is also updated when running :make
(which is why its called quickfix for fixing errors). Because of this there also is an alterative to the quickfix list called the "location list". To use it instead you use :lvimgrep
, then use l-prefixed commands rather than c-prefixed commands - :lopen
, :lolder
, :lnewer
.
There is, of course, a lot more you can do. See :help quickfix
for more info.
PS, You said you didn't want an approach that deletes lines and then undoing them. But since you marked g/ERROR
as the answer I thought I would point out a quick and dirty way is to do g!/ERROR/d
. You can then easily undo it using u
. Also FYI, you can do :set hlsearch
to highlight patterns matched with :g
commands.
Solution 3:
You can use
:g/ERROR/
to print all the lines with ERROR
Also there is a Vim plugin which I saw many times but didn't use: foldsearch : fold away lines that don't match a given pattern