Se eu quiser excluir todas as palavras, isso é fácil, porque eu faria algo assim:
:s%/WORD//g
Mas e se eu quiser fazer xyz
a cada ocorrência de "WORD"? Por exemplo, digamos que eu queira excluir todas as linhas que contenham "WORD". Posso pensar em algumas maneiras de fazer isso, mas nenhuma delas parece ideal.
1)
/WORD
e pressione manualmente ddnddnddnddn...
até que não haja mais ocorrências. Mas isso é demorado se houver muitas linhas para fazer isso.
2)
qd/WORD<enter>ddq
e então adivinhe quantas vezes o WORD ocorre e, por exemplo:
500@d
Mas isso irá A) perder um monte de linhas ou B) excluir um monte de linhas extras.
Existe uma maneira melhor de fazer isso?
500@d
como você descreve é realmente seguro. A reprodução da macro será interrompida quando o termo de pesquisa não for encontrado. Então, você verá o erro "Padrão não encontrado: WORD" depois que todas as linhas que o contêm foram excluídas.Respostas:
Você pode usar os comandos
:global
e:normal
para isso. O:global
comando tem a seguinte sintaxe:Isso executará "comando" em todas as ocorrências de "padrão". Você pode usar o
:normal
comando para executar uma série de pressionamentos de tecla em cada ocorrência de uma palavra usando:global
. Igual a:Se essas teclas envolverem teclas especiais como
<Ctrl>
, você pode combiná-lo com o:execute
comando da seguinte maneira:Observe que você deve colocar uma barra invertida antes de cada ocorrência de uma chave especial.
Para mais informações sobre esses comandos, consulte
:help :normal
e:help :global
.fonte
Apenas para completar, você pode usar
:substitute
, se corresponder - no seu exemplo (exclua toda a linha que possui WORD) - toda a linha que contém WORD, por exemplo:Isso tem uma implícita "substituir correspondência por nada", ou seja, é a forma mais curta de:
Combinado com o
\zs
,\ze
,\(
-\)
(agrupamento), e\=
(na peça de reposição) comsubmatch()
,:substitute
pode ser muito poderosa.fonte
Parece que você está procurando
:global
.fonte
:delete
e não a operação no modo normald
.:normal
. E se você precisar de chaves especiais, poderá até precisar:exe
-> `exe" normal aFooFar \ <esc> ""