vi atajo para eliminar "hasta el próximo carácter X"

194

Entiendo que vi tiene teclas de acceso directo para eliminar caracteres, palabras y líneas con varias opciones.

Sin embargo, no pude encontrar esto:

  • eliminar del cursor al siguiente caracter especificado

Por ejemplo, podría escribir du"esperando que el editor "elimine hasta que se encuentre el siguiente "carácter"

Lo más cerca que sé es d9wdónde 9está la cantidad de palabras que se eliminarán.

¿Alguien sabe si esto es posible?

kctang
fuente
Si estás interesado en Vi y Vim, ahora tienen su propio sitio SE: Vi y Vim
postre el

Respuestas:

303

Utilice dtc, donde c es cualquier carácter, por ejemplo, para usted, que deseadt"

Esto eliminará hasta pero no incluye c .

Si tuvieras:

delete until exclamation point!

Y el cursor estaba en el primer espacio y tecleaste dt!, obtendrías:

delete!

También dfc.

Esto eliminará hasta e incluyendo c .

Usar df!el mismo ejemplo anterior te daría:

delete

Casi cualquier "movimiento" se puede utilizar para los d, c, yy comandos similares.

Arcege
fuente
77
Presumiblemente, la mnemónica es t para "hasta"? Buena respuesta.
pensar demasiado el
15
También puede eliminar a la instancia anterior de un personaje con la versión en mayúscula de los comandos de movimiento. Quizás más útil para comas, dT,y dF,.
joelostblom
3
Esto no funciona en varias líneas.
0xcaff
3
¿Se puede hacer esto en un rango de líneas?
Ray
2
Para hacer algo similar en un rango de líneas, se puede realizar una búsqueda habitual (como en la respuesta de zpletan): d/wordbúsquedas hasta word. Debe ir seguido de enter (para cerrar la búsqueda).
Eric O Lebigot
59
  • Para eliminar reenviar hasta el tipo de carácter 'X' dtX

  • Para eliminar hacia adelante a través del tipo de carácter 'X' dfX

  • Para borrar hacia atrás hasta el tipo de carácter 'X' dTX

  • Para eliminar hacia atrás a través del tipo de carácter 'X' dFX

Mark Wong
fuente
30

La entrada dt # (no un comando: úsalo como un movimiento como G)

se eliminará del cursor hasta, pero sin incluir el #. Puede sustituir cualquier carácter por #.

Jessie
fuente
2
¡Esta es la respuesta correcta! df # eliminará # también.
Vietnam
estado buscando esto, esto es increíble
Nadeem Khedr
18

Parece que @Arcege ya respondió la pregunta, pero lo hice d/lpara eliminar hasta el personaje l; otros personajes también funcionarían.

zpletan
fuente
3
Esto funciona para cosas en líneas nuevas.
jasonszhao
Nota: esto debe ser seguido por Enter.
Eric O Lebigot
6

wse mueve a la siguiente palabra. lpasa al siguiente personaje.

Entonces es d9lpara eliminar los siguientes 9 caracteres.

Shun Zhang
fuente
2
Cerrar, les la tecla de flecha derecha de Vim, por lo que en realidad está eliminando a la derecha. Por el contrario, d9heliminaría 9 caracteres restantes.
Walf