2009-02-01 7 views
127

El operador Vim % salta para hacer coincidir paréntesis, finaliza el comentario y algunas otras cosas. Sin embargo, no coincide con las etiquetas XML (o cualquier otra etiqueta, según mi leal saber y entender).Salta a las etiquetas XML coincidentes en Vim

¿Cuál es la mejor manera de pasar a la etiqueta XML coincidente con Vim?

Nota: Lo que realmente que quiero hacer es duplicar una sección en un archivo XML sin mirar manualmente para la etiqueta correspondiente.

+4

Al abordar la pregunta original (que precede a la aclaración ** Nota: **), la combinación [v + a + t] (http: //stackoverflow.com/a/10881471/921836) parece llevarte al final de la selección visual. El otro lado de esto parece ser el comando "o" dentro del modo visual, que te lleva al final alternativo de tu selección actual. Este es un truco efectivo no solo en documentos XML, sino también al editar PHP/HTML (como sucedió en mi caso). –

+0

@JustinBell: ¡es un buen truco! ¡Gracias! Creo que vale la pena hacer una pregunta por sí mismo :-) –

+0

Relacionado: [¿Cómo saltar entre las etiquetas HTML/XML que coinciden?] (Http://vi.stackexchange.com/q/780/467) en Vim SE – kenorb

Respuesta

71

Hay un complemento vim llamado matchit.vim. Puede encontrarlo aquí: http://www.vim.org/scripts/script.php?script_id=39. Fue creado básicamente para el propósito exacto que describes.

Instale eso, coloque el cursor sobre el cuerpo de la etiqueta (no el <>, de lo contrario coincidirá con esos) y presione% para saltar a la otra etiqueta. Vea la página del script para descubrir qué más coincide.

+3

. Ha estado sentado en mi disco duro todo el tiempo. – innaM

+34

Hay alguna versión de matchit, que ya viene con Vim por cierto. 'runtime macros/matchit.vim' debería habilitarlo y permitir que'% 'coincida con las etiquetas XML. – Svend

+0

mtchit.vim parece estar habilitado de forma predeterminada en NeoVim. – James

35

El OP indicó que lo que realmente quería hacer era copiar una sección de XML sin tener que encontrar la etiqueta correspondiente. Esto se realiza fácilmente en modo normal con yat<motion>p, que tira del texto dentro e incluye las etiquetas coincidentes, luego lo pega. yit<motion>p es casi lo mismo, pero no incluye las etiquetas externas.

La 'y' en la cadena es, por supuesto, el modo normal de comando "yank". (:help y)

a o i puede ser utilizado para la selección de objetos después de un operador como y o dentro de una selección visual. El símbolo después de a o i especifica qué se debe seleccionar. El tipo de objeto t utilizado aquí indica una etiqueta SGML. (:help object-select).

Por supuesto <motion> solo significa moverse a un lugar por el medio de su elección y p pone el texto extraído en esa ubicación.

+0

¿Te importa explicar la respuesta? – shredding

+1

@shredding: Tienes razón, se merecía un poco más. –

206

Puede hacer esto sin plugins adicionales:

  • lugar del cursor en la etiqueta
  • vunt - seleccionará la etiqueta y el lugar del cursor (externa) en el extremo
  • una vez que tenga su selección, puede alternar entre la parte superior e inferior con o (actualización basada en Michael Gruber 'S nota)
  • c - cambia o, y - copia del mismo, dejando escapar de modo visual ...

Otra operación útil es: vit - seleccionará el contenido de la etiqueta (interno).

actualización (gracias a @elrado) Ejemplo: vito le permitirá seleccionar el contenido interno del cursor etiqueta y la posición en el principio del texto seleccionado.

Referencia: https://superuser.com/questions/182355/how-can-i-select-an-html-tags-content-in-vim

referencia Vim (gracias a @Geek para señalar esto):

:help visual-operators 

se obtendrá:

4. Operating on the Visual area    *visual-operators* 

The objects that can be used are: 
    ... 
    at a <tag> </tag> block (with tags)  |v_at| 
    it inner <tag> </tag> block   |v_it| 
    ... 
+0

Quiero saltar a una etiqueta, no "seleccionar" el contenido adjunto. Y si puedo hacerlo con 1 o 2 teclas, ¿por qué haré 5 pulsaciones de teclas cada vez que quiera seleccionar una etiqueta? (lo que sucede MUCHAS veces) –

+2

Es bueno que haya una forma incorporada, aunque intrincada, para saltar a la etiqueta de cierre. ¿Tomar un desvío a través del modo visual es la única forma de llegar allí? –

+1

Santo Molly, ¡siempre aprendes cosas nuevas con Vim! Hay mucho que aprender, esto me ayudó mucho, ¡gracias! – gosukiwi

5

Sólo mi truco de usar "tirón "," selección de objeto "(selección de etiqueta) y" saltar al último texto arrastrado ".

yit`] 

para saltar a la derecha antes de cerrar la etiqueta

y

yit 

para saltar a la derecha después de la apertura de la etiqueta

Nota: esto va a cambiar el contenido del registro por defecto

Cuestiones relacionadas