2009-06-03 8 views
14

Si, en un símbolo del sistema, corrodeshacer DIFF puso al copiar líneas entre ventanas vimdiff

vimdiff file1 file2 

consigo una instancia de vim que tiene dos archivos de lado a lado abierto. Supongamos que el texto de los archivos es el siguiente (archivo1 está a la izquierda, fichero2 a la derecha):

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

Ahora supongamos que mi cursor está en la "f" del "nombre" y que deseo para copiar la primera línea del archivo1 en la primera línea del archivo2.

Una forma de hacer esto es seleccionar y dar un tirón (copiar) la línea con v $ y, y luego usar Ctrl + wl para mover el cursor a través de la primera línea del archivo 2 y escriba p para pegar la línea copiada. Si hago esto y luego decido que en realidad no quería hacerlo después de todo, puedo presionar u para deshacer el comando de pegar que realicé en el archivo2.

Otra forma de hacerlo es usar el comando diff put dp. Sin embargo, si después de hacer esto decido que no tenía intención de hacerlo, no puedo deshacerlo simplemente presionando u porque mi cursor está todavía en el archivo1 y el comando u deshará el cambio más reciente en el archivo1 , no el cambio más reciente a archivo2. Así que en lugar tengo que usar Ctrl + w l o Ctrl + w w para mover el cursor a la ventana para fichero2 y luego prensa u.

Entonces, mi pregunta es: después de haber usado dp como arriba, ¿hay alguna manera fácil de deshacerlo sin tener que mover el cursor a la ventana del otro archivo?

Respuesta

12

Realmente no hay ningún comando para esto, pero usted puede asignar el suyo. Ponga lo siguiente en su vimrc y luego use du para hacer diff undos.

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

Esto podría comportarse raro si hay más de dos ventanas. (Solo una nota, no obstante una respuesta perfecta a la pregunta). –

10

depende de cómo va el flujo de trabajo, pero por lo general utilizan do obtener un diff en mi archivo en vez de dp que pone el diff en el otro. De esta forma, puede usar u y ctrl + r como de costumbre.

Dado que los comandos de navegación de diff funcionan de la misma manera desde cualquier archivo, ¡debería estar listo para empezar!

siguiente diferencia: ]c

prev diff: [c

+0

solución mucho más simple +1 – cctan

0

Al comparar archivos, me gusta usar vimdiff o vim -d.Una forma de cambios de copiado con vimdiff es:

]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 

Esto funciona como:

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

mucho más fácil de leer –

+0

¿podría votar mi respuesta? Necesito hasta 15 –

Cuestiones relacionadas