Excluir do cursor até a enésima ocorrência do caractere x

15

Eu sei que posso excluir do cursor até e incluindo a primeira ocorrência de um caractere x com d/x<CR>ou com v/x<CR>dse eu quiser ver a seleção primeiro e depois excluir. Como posso apagar a partir da posição atual do cursor até o n º ocorrência de x ?

Por exemplo, se o cursor estiver após o primeiro espaço no

yada yada yada
yada yada yada x
yada yada yada x
yada yada yada xada

xx

e digito um comando para remover até o terceiro x, o resultado precisa ser:

yada
xx

Erwin Rooijakkers
fonte

Respostas:

21

Você pode fazer :

wd4/x<Enter>

Se você começar no canto superior esquerdo do seu texto

Explicação

  • w : move para o início da próxima palavra
  • d : excluir
  • 4/x<Enter> : até a quarta ocorrência de x

Se você não souber o número de vezes que gostaria de fazê-lo antecipadamente, também poderá: d/x<Enter>e pressione .para repetir

edi9999
fonte
5
Dica extra: Isto também funciona com fe amigos ( F, t, T, ;): por exemplo 2fx, poderá ir para o segundo x, ou 2;vai repetir a última fduas vezes.
Martin Tournoij 14/01
1
@Carpetsmoker: Isso funciona apenas para letras na linha atual.
Jürgen Krämer
5

Você pode fazer isso digitando

<n>df<x>

Onde:

<n> is the number of occurrence of particular character
df<x> means delete till you find the occurrence of character x
Kapil
fonte
0
<n>macro 

é comumente usado no vim para repetir a macro "n" vezes.

portanto, para excluir até a 1ª ocorrência de x, você usaria 1dfx. Da mesma forma, para excluir até a 3ª ocorrência de x, você usaria 3dfx.

thenakulchawla
fonte
1
Acho que você perdeu a palavra "macro": no vim, uma macro é uma sequência de chaves registradas em um registro e chamada com @xonde xestá seu registro. O que você está se referindo é um comando no modo normal.
Statox
Sim, eu quis dizer um comando normal. Mas isso também é verdade para uma macro. Podemos executar a macro n vezes adicionando um número antes da macro.
thenakulchawla
1
Sim, é verdade. Eu estava apenas apontando que <n>macronão é uma notação padrão no vim para as macros e, como sua resposta usa um comando de modo normal, é praticamente o mesmo que o de kapil.
Statox
0

Dado:

yada yada yada$
yada yada yada x$
yada yada yada x$
yada yada yada x$
xx$

onde o $fim das linhas indica ( :set listmodo), se o cursor estiver no início do segundo yadana primeira linha, primeiro precisamos fazer backup no espaço anterior usando h, para incluí-lo na exclusão. Então apenas 4d/xEnter. Em outras palavras, apenas uma contagem na frente d/x. O resultado é exatamente:

yada$
xx$
Kaz
fonte