Eliminar del cursor hasta la enésima aparición del carácter x


15

Sé que puedo eliminar del cursor hasta e incluyendo la primera aparición de un carácter x con d/x<CR>o con v/x<CR>dsi quiero ver la selección primero y luego eliminar. ¿Cómo puedo eliminar de la posición actual del cursor hasta el n º ocurrencia de x ?

Por ejemplo, si el cursor está después del primer espacio en

yada yada yada
yada yada yada x
yada yada yada x
yada yada yada x

xx

y escribo un comando para eliminar hasta la tercera x, el resultado debe ser:

yada
xx

Respuestas:


21

Tu puedes hacer :

wd4/x<Enter>

Si comienzas en la parte superior izquierda de tu texto

Explicación

  • w : pasar al principio de la siguiente palabra
  • d : Eliminar
  • 4/x<Enter> : hasta la cuarta aparición de x

Si no sabe la cantidad de veces que le gustaría hacerlo de antemano, también puede hacerlo: d/x<Enter>y luego presione .para repetir


55
Consejo adicional: Esto también funciona con fy amigos ( F, t, T, ;): por ejemplo, 2fxva a llegar a la segunda x, o 2;va a repetir la última fdos veces.
Martin Tournoij

1
@Carpetsmoker: esto solo funciona para letras en la línea actual.
Jürgen Krämer

5

Puedes hacer esto escribiendo

<n>df<x>

dónde:

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

0
<n>macro 

se usa comúnmente en vim para repetir la macro "n" veces.

así que para eliminar hasta la primera aparición de x, usaría 1dfx. Del mismo modo, para eliminar hasta la tercera aparición de x, usaría 3dfx.


1
Creo que perdió la palabra "macro": en vim, una macro es una secuencia de clave grabada en un registro y llame a @xdonde xestá su registro. A lo que se refiere es a un comando de modo normal.
statox

Sí, me refería a un comando normal. Pero esto también es cierto para una macro. Podemos ejecutar la macro n veces agregando un número antes de la macro.
thenakulchawla

1
Sí, eso es verdad. Solo estaba señalando que <n>macrono es una notación estándar en vim para las macros y como su respuesta usa un comando de modo normal, es más o menos lo mismo que el de kapil.
statox

0

Dado:

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

donde los $extremos indicados de las líneas ( :set listmodo), si el cursor está al comienzo del segundo yadaen la primera línea, primero tenemos que retroceder al espacio anterior usando h, para incluirlo en la eliminación. Entonces solo 4d/xEnter. En otras palabras, solo un recuento delante d/x. El resultado es exactamente:

yada$
xx$
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.