¿Eliminar texto entre etiquetas HTML en vim?

164

Lo sé

di<

se eliminará en una etiqueta HTML.

¿Hay una manera fácil de eliminar texto entre dos etiquetas?

<span>How can I delete this text?</span>

¡Gracias!

CMB
fuente

Respuestas:

321

diteliminará el texto entre las etiquetas XML coincidentes. ( ites para "bloque de etiqueta interior").

Ver :h ity :h tag-blocks.

Brian Carper
fuente
30
Y, por supuesto, citcuando quieras escribir inmediatamente después.
Debilski el
66
Y el complemento Surround ( vim.org/scripts/script.php?script_id=1697 ) es increíble cuando quieres hacer cosas como cambiar la etiqueta circundante (cst) de un <p> a un <div>, por ejemplo.
Kris Jenkins el
44
También hay dat (Eliminar un bloque de etiqueta) que incluye las etiquetas reales. cit que es como dit pero luego ingresa al modo de inserción. cat que es como dat pero luego ingresa al modo de inserción. También di "y di (para eliminar comillas dobles internas y eliminar paréntesis internos respectivamente.
aiham
@KrisJenkins, ¿puedes mostrar un ejemplo completo de cómo lograrlo? Solo puedo hacer eso con comillas / corchetes.
FelikZ
1
También vat(o vit), seguido de repetidos at(o it) para seleccionar progresivamente las etiquetas circundantes. (O v2at, etc.) Luego dpara eliminar (etc.).
Joe Freeman
27
cit
ci"

Dos de los mejores comandos habilitadores de productividad de vim.

Ahorro mucho tiempo y esfuerzo solo con esos dos.

chipairon
fuente
3
citestá cubierto en este hilo, pero para la posteridad, ci"se eliminará hasta el siguiente "encontrado. ideal para cambiar nombres de clase en etiquetas html, como <span id="really long annoying-id">: con el cursor al principio ", presiona ci"y suelta para insertar nuevos caracteres entre las comillas.
Alex Moore-Niemi
ciwtambién es útil ya que elimina la palabra actual; Lo uso más que city en ci"realidad.
John Sparwasser
2
@ AlexMoore-Niemi: en ci"realidad eliminará el texto a la izquierda hasta la próxima cita y a la derecha hasta la próxima cita y luego ingresará al modo de inserción. ct"En realidad, es el comando para "borrar hasta la próxima" encontró" Pero sí, se comporta de la misma si el cursor está en la cita izquierda..
schlimmchen
9

intente dt < mientras el cursor está en el primer carácter para eliminar. En tu ejemplo la 'H'.

JD Frias
fuente
También muy útil para otras situaciones, ¡gracias! (Pensé que debería ser "dt <")
CMB
1
Si bien esto es técnicamente cierto, requiere navegar hasta el primer carácter que desea eliminar en lugar de simplemente saltar a cualquier parte de la línea. Pero cierto es cierto. :-)
lyonsinbeta
4

( cursor en el primer carácter a eliminar ) v / <[enter] d

Esta solución comienza con el primer carácter, luego ingresa al modo visual ("v"). Luego busca el siguiente paréntesis de inicio ("/ <"), y luego presiona enter para salir de la búsqueda.

En este punto, su selección visual cubrirá el texto a eliminar. presione d ("d") para eliminarlo.

Si tuviera que hacer esto para un montón de etiquetas, grabaría el comando y lo combinaría con otras búsquedas para que sea repetible. La secuencia de teclas podría verse así:

[ cursor al inicio del archivo ] qa /> [enter] lv / <[enter] dnq

entonces presione:

20 @ a

hacer esto por 20 etiquetas

puntilla
fuente
Solía ​​usar el comando como c/<[enter]mucho, en mi "vida de Vim", pero ahora estoy un poco arrepentido por eso. Verá, la mayoría de los complementos de "modo Vi" para otros editores / IDE populares no son compatibles con este tipo específico de comando. Apoyan cit, ci", ct<y sin embargo. Entonces, estoy volviendo a enseñar de nuevo.
pilat
-1

Si tiene la intención de hacer lo contrario a eliminar texto entre banderas, sugiero instalar Vim-Surround y ejecutar, lo dstque elimina la etiqueta surround

Nick Sarafa
fuente