2009-02-18 18 views
5

Tengo el siguiente en un archivo XML:¿Cómo puedo duplicar una entrada completa en un archivo XML con VIM?

<TypeDef name="a"> 
    <ArrayType high="14" low="0"> 
    <UndefType type="node"> 
    </UndefType> 
    </ArrayType> 
</TypeDef> 

Y quiero copiar esta entrada. Normalmente iría a la primera línea, entraría en modo Line-Visual usando V, bajaría a la última línea, yank y pegaría.

¿Cómo puedo copiar la entrada completa sin buscar el final de la entrada yo mismo?

Respuesta

2

Además de la respuesta de Nathan es posible que desee echa un vistazo a matchit.vim ... Si usted tiene una nueva instalación que probable que lo

http://www.vim.org/scripts/script.php?script_id=39

MatchIt extiende% de vim (Encontrar soporte a juego) para cubrir etiquetas xml/html y más. Así que para su solución, la acción sería desde el principio etiqueta

V%y 

matchit es, por supuesto, muy útil para la navegación general.

6

La solución que aprendí hoy (gracias a CMS que respondió this pregunta) es usar los movimientos de text object de VIM.

colocar el cursor en la entrada de la copia, y escriba lo siguiente en el modo de comando: yat:

  • y tirones acuerdo con el siguiente movimiento.
  • at selecciona la etiqueta actual.

Tenga en cuenta que si el cursor está dentro de la etiqueta "ArrayType", eso es lo que se extraerá.
También tenga en cuenta que esto no arrastrará las líneas enteras. Solo desde la abrazadera de apertura de la etiqueta de apertura hasta la abrazadera de cierre de la etiqueta de cierre. Esto puede causar problemas de alineación si no tiene cuidado.

Una forma de evitar esto es pegando con :put en lugar de simplemente p, así: yat:put.
Tenga en cuenta que esto no conservará la sangría, porque la entrada XML no se retiró como una línea completa.

Otra manera de hacerlo es: vatVy:

  • v entra en el modo visual.
  • at es como el anterior.
  • V cambia al modo Visual de línea y selecciona toda la línea.
  • y yanks la selección.
+0

¡Método impresionante! Estaba tratando de definir una nueva función vim, pero el objeto de texto parece ser lo suficientemente poderoso. –

+0

puede ir directamente a linewise visual con V ... por ejemplo, Vaty sería suficiente para el segundo ejemplo – michael

+0

sí, pero luego hacer 'at' me saca de Line Visual, y de todos modos tengo que presionar V otra vez.Me imagino que estoy mejor salteando el primer turno y simplemente presionando v –

Cuestiones relacionadas