Outra abordagem, dependendo do seu caso de uso, seria usar o vimgrep e seus resultados na correção rápida . Você pode fazer o seguinte:
:vimgrep pattern %irá pesquisar o arquivo atual e levá-lo ao primeiro resultado da pesquisa. Mais importante, também coloca os resultados na "lista de correções rápidas".
:copenirá então abrir a lista de correção rápida em uma janela de correção rápida separada. Portanto, você terá uma janela separada com todas as linhas de seu último vimgrep. Dentro da janela de correção rápida, você pode pressionar Enter ou clicar duas vezes em uma linha para pular para a linha correspondente em seu arquivo original.
:colderpermitirá que você volte para listas de correção rápida mais antigas (resultados vimgrep mais antigos). E :cneweravança para resultados de pesquisa mais recentes.
Observe que a lista de correções rápidas também é atualizada durante a execução :make(por isso é chamada de correção rápida para corrigir erros). Por causa disso, também existe uma alternativa para a lista de correções rápidas denominada "lista de locais". Para usá-lo, em vez de utilizar :lvimgrep, em seguida, usar os comandos prefixados-l em vez de comandos c-prefixado - :lopen, :lolder, :lnewer.
Há, é claro, muito mais que você pode fazer. Veja :help quickfixpara mais informações.
PS, você disse que não queria uma abordagem que exclua linhas e depois as desfaça. Mas como você marcou g/ERRORcomo a resposta, pensei em apontar uma maneira rápida e suja de fazer g!/ERROR/d. Você pode desfazê-lo facilmente usando u. Além disso, para sua informação, você pode fazer :set hlsearchpara destacar padrões combinados com :gcomandos.