Ocultar todas as linhas (não) correspondentes no Vim

87

É possível mostrar / ocultar todas as linhas correspondentes no vi ou no Vim? Não destacar, mas apenas mostrar essas linhas.

Por exemplo, tenho um texto com palavra a palavra ERROR. Como faço para mostrar apenas linhas contendo ERRORe como mostrar apenas linhas sem ERROR?

Existe uma solução sem excluir todas as linhas correspondentes e apenas desfazê-las?

Alex Bolotov
fonte

Respostas:

106

Você sabe sobre o :globalcomando? Isso faz o que você quer?

:g/ERROR

e pelo contrário:

:g!/Error

ou equivalente:

:v/Error
user55400
fonte
18
Isso não é muito bom. Depois de rolar até o final, o comando termina e tudo aparece novamente. Não está realmente escondendo esse conteúdo.
Kan Li
Clique em @KanLi g<para ver novamente, ou @:se você não tiver executado e comandos.
D. Ben Knoble
52

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.

Studgeek
fonte
1
Obrigado pela dica sobre ": g! / ERROR / d" melhor do que a resposta aceita.
VinGarcia
Você pode fazer isso com linhas que não correspondem ao padrão?
Jacktose
26

A melhor maneira de fazer isso é->

:vimgrep /something/g % | copen

Isso abrirá a lista de correspondências para sua palavra-chave e também mostrará apenas as linhas correspondidas na janela de correção rápida.

Substitua% pelo caminho para o arquivo, se não considerar o arquivo atual.

Shivendra
fonte
1
Substitua% pelo caminho do arquivo se você não estiver considerando o arquivo atual.
Shivendra
Você pode fazer isso com linhas que não correspondem ao padrão?
Jacktose
1

:vimgrep /something/g % | copenfunciona muito bem. Também :g/<pattern>/dpode ser usado para excluir linhas com o padrão

Sevvalai
fonte
Esta é exatamente outra resposta a esta pergunta.
Shivendra
1

caso você use, fzfvocê pode usar:

  • :Lines em todos os arquivos abertos
  • :BLines apenas em buffer aberto
  • :Rg [pattern] usando ripgrep
menos
fonte
1

Alguma maneira suja de hack de fazer isso:

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

Você provavelmente quer dizer comando em less vi vim & / pattern / que mostra linhas contendo / pattern / (como grep).

Charkh
fonte