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?


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

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.


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.


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


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

1

Alguma maneira suja de hack de fazer isso:

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

0

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.