Em um arquivo longo, eu gostaria de procurar um padrão que corresponda aproximadamente a 200 linhas. As linhas correspondentes estão em locais aleatórios no arquivo.
Quando uma linha corresponde, apenas a própria linha é relevante, sem contexto acima ou abaixo.
Normalmente, eu pesquisava /
e pularia as correspondências com n
.
Mas isso significa que há apenas uma ou duas linhas relevantes na tela por vez.
Existe uma maneira de ocultar todas as linhas que não correspondem, enquanto percorre a lista de linhas de resultados?
Uma abordagem de força bruta seria excluir todas as linhas não correspondentes e desfazer essa exclusão posteriormente. Mas isso é feio de várias maneiras, mesmo que não acabe em desfazer persistente ...
:vimgrep
pode ser abreviado para:vim
:ccl[ose]
ou normalmente fecha um buffer (por exemplo, alterne para ele e:bd
). Você pode reabrir o buffer do quickfix executando:cw[indow]
novamente e ele usará seus últimos resultados do vimgrep.Você pode listar todas as linhas correspondentes com
(O
:print
comando pode ser omitido; é o padrão para:g
.)fonte
g/REgexp/p
) ... O problema é que você não pode pular facilmente para uma das partidas ...g
. Presumo que seja um padrão global. Eu costumo fazer uma pesquisa VI com uma barra/pattern
e isso encontraria todas as ocorrências. Pode-se navegar até eles pressionando a letran
:g[lobal]
que assume um padrão como argumento. Você encontrará todos os detalhes em:help :global
.Você pode usar as opções
foldmethod
efoldexpr
para dobrar linhas irrelevantes.Após a pesquisa, a última pesquisa é armazenada no
@/
registro. Portanto, você pode facilmente dobrar tudo o que não corresponde dessa maneira (apenas para correspondências de uma linha):Métodos mais avançados, como adicionar vários níveis de dobra para linhas de contexto que você pode mostrar ou ocultar ou combinar várias linhas, podem ser encontrados no Wiki de dicas do Vim .
fonte
set foldlevel=0
necessário? Mas talvez seja o padrão.:tab sp
obtenho uma nova exibição descartável no arquivo. Então, voltar é tão simples quanto:close
ou qualquer outra maneira de eliminar a guia.Se a ordem não importa, basta mover as linhas.
Para obter mais ajuda, consulte:
fonte
:g/pat/m$
(mover as linhas adaptado à extremidade) também é OK,[d] elimina todas as linhas que não (!) correspondem aos padrões:
ou ainda mais simples (obrigado pelos comentários de 'Camada B'):
fonte
:v
do que:g!
. (Não me lembro a última vez que eu vi o último utilizado, TBH!)Se você deseja listar todas as linhas correspondentes (como na minha outra resposta) e pular para uma correspondência específica, meu plug-in FindOccurrence fornece um
[/
mapeamento para isso (e[n
para o último padrão de pesquisa, em vez de procurar por uma).[/pattern
lista como:g/pattern
, mas depois pede o número da correspondência para a qual saltar.fonte
Outra maneira é usar
:h :ilist
, eu uso para obter uma visão geral da página de manual. seu resultado fica assim:Aqui está uma pequena função que permite escolher ir para a linha de resultado por índice:
Pode ser usado assim:
fonte