2009-02-18 14 views
5

Je suit dans un fichier XML:Comment puis-je dupliquer une entrée entière dans un fichier XML avec VIM?

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

Et je veux copier cette entrée. Normalement, j'allais à la première ligne, entrer en mode ligne-visuel en utilisant V, descendre à la dernière ligne, yank et coller.

Comment puis-je copier l'entrée entière sans chercher moi-même la fin de l'entrée?

Répondre

2

En plus de la réponse de Nathan vous pouvez consulter matchit.vim ... Si vous avez une version plus récente que vous installez ont probablement

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

matchit étend le% de vim (trouver le support correspondant) pour couvrir les tags xml/html et plus encore. Donc, pour votre solution, l'action serait à partir du début tag

V%y 

matchit est bien sûr très utile pour la navigation générale.

6

La solution que j'ai apprise aujourd'hui (grâce à CMS qui a répondu à la question this) est d'utiliser les mouvements text object de VIM.

placer le curseur dans l'entrée à copier, et saisissez ce qui suit en mode commande: yat:

  • y yanks en fonction du mouvement suivant.
  • at sélectionne l'étiquette actuelle.

Notez que si le curseur est à l'intérieur de la balise "ArrayType", c'est ce qui sera supprimé.
Notez également que cela ne supprimera pas les lignes entières. Uniquement de l'attache d'ouverture de l'étiquette d'ouverture à l'attache de fermeture de l'étiquette de fermeture. Cela peut entraîner des problèmes d'alignement si vous ne faites pas attention.

Une façon de contourner cela est de coller avec :put au lieu de seulement p, comme ceci: yat:put.
Notez que cela ne préserve pas l'indentation, car l'entrée XML n'a pas été tirée comme une ligne entière.

Une autre façon de le faire est la suivante: vatVy:

  • v entre en mode visuel.
  • at est comme ci-dessus.
  • V passe en mode Visualisation ligne et sélectionne la ligne entière.
  • y supprime la sélection.
+0

Méthode impressionnante! J'essayais de définir une nouvelle fonction vim, mais l'objet texte semble être assez puissant. –

+0

vous pouvez aller directement dans la ligne visuelle avec V ... par exemple Vaty suffirait pour le deuxième exemple – michael

+0

oui, mais en faisant le 'at' me sort de Line Visual, et je dois appuyer à nouveau sur V de toute façon.Je me dis qu'il vaut mieux sauter le premier quart et appuyer sur v –