2009-06-03 18 views
14

Si, à une invite de commande, je lancediff Défaire mis lors de la copie des lignes entre les fenêtres Vimdiff

vimdiff file1 file2 

je reçois une instance vim qui a deux fichiers côte à côté ouvert. Supposons que le texte dans les fichiers ressemble à ceci (fichier1 est à gauche, fichier2 à droite):

╔═══════╤═══════╗ 
║foo │-------║ 
║bar │bar ║ 
║grue │-------║ 
║~  │~  ║ 
║~  │~  ║ 
╚═══════╧═══════╝ 

Supposons maintenant que mon curseur est sur le « f » de « foo » et que je souhaite copier la première ligne de fichier1 à la première ligne de fichier2.

Une façon de le faire est de sélectionner et Yank (copie) de la ligne avec v $ y, puis utilisez Ctrl + wl pour déplacer le curseur sur la première ligne de fichier2, puis tapez p pour coller la ligne copiée. Si je fais cela et que je décide alors que je n'ai pas vraiment envie de le faire après tout, je peux appuyer sur ou pour annuler la commande coller que j'ai effectuée dans le fichier 2.

Une autre façon de le faire est d'utiliser la commande diff put dp. Cependant, si après cela je décide de ne pas le faire, je ne peux pas l'annuler simplement en appuyant sur u car mon curseur est toujours dans le fichier 1 et la commande u annulera la modification la plus récente dans le fichier 1 , pas la modification la plus récente dans fichier2. Ainsi, au lieu que je dois utiliser Ctrl + w l ou Ctrl + w w pour déplacer le curseur sur la fenêtre pour fichier2 et puis appuyez suru. Donc, ma question est la suivante: après avoir utilisé dp comme ci-dessus, y a-t-il un moyen facile pour moi de le défaire sans avoir à déplacer mon curseur dans la fenêtre de l'autre fichier?

Répondre

12

Il n'y a vraiment aucune commande pour ceci mais vous pourriez faire votre propre carte. Mettez les éléments suivants dans votre vimrc, puis utilisez du pour faire diff différent.

nmap du :wincmd w<cr>:normal u<cr>:wincmd w<cr>
+1

Cela pourrait se comporter bizarre s'il y a plus de deux fenêtres. (Juste une note, néanmoins une réponse parfaite à la question). –

10

dépend de la façon votre flux de travail va, mais je l'utilise habituellement do pour obtenir un diff dans mon dossier plutôt que d p qui met la diff dans l'autre. De cette façon, vous pouvez utiliser u et ctrl + r comme d'habitude.

Étant donné que les commandes de navigation diff fonctionnent de la même façon à partir de n'importe quel fichier, vous devriez être prêt!

suivant diff: ]c

prev diff: [c

+0

beaucoup plus simple solution +1 – cctan

0

Lorsque l'on compare les fichiers, j'aime utiliser vimdiff ou vim -d.Une façon de changements de copie avec vimdiff est:

]c    - advance to the next block with differences 
[c    - reverse search for the previous block with differences 
do (diff obtain) - bring changes from the other file to the current file 
dp (diff put) - send changes from the current file to the other file 

Cela fonctionne comme:

:diffget the same with do 
:diffput the same with dp 
+0

beaucoup facile à lire –

+0

pourriez-vous voter jusqu'à ma réponse? J'ai besoin de jusqu'à 15 –