tutorial tool commands vim text diff text-editor vimdiff

tool - Deshacer diferenciación al copiar líneas entre ventanas vimdiff



vimdiff commands (3)

Cuando comparo archivos, me gusta usar vimdiff o vim -d . Una forma de copiar cambios 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

Si, en un símbolo del sistema, ejecuto

vimdiff file1 file2

Obtengo una instancia de vim que tiene dos archivos abiertos lado a lado. Supongamos que el texto en los archivos se ve así (el archivo 1 está a la izquierda, el archivo 2 a la derecha):

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

Ahora supongamos que mi cursor está en la "f" de "foo" y que deseo copiar la primera línea de archivo1 a la primera línea de archivo2.

Una forma de hacer esto es seleccionar y jalar (copiar) la línea con v $ y , y luego usar Ctrl + wl para mover el cursor hasta la primera línea del archivo2, y luego escribir p para pegar la línea copiada. Si hago esto y luego decido que realmente no quiero hacerlo después de todo, puedo presionar u para deshacer el comando de pegar que ejecuté 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 quise hacerlo, no puedo deshacerlo simplemente presionando u porque mi cursor todavía está en archivo1 y el comando u deshará el cambio más reciente a archivo1, no el más cambio reciente a file2. Entonces, en lugar de eso, tengo que usar Ctrl + wl o Ctrl + ww para mover el cursor a la ventana de file2 y luego presionar u .

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


Depende de cómo vaya su flujo de trabajo, pero generalmente uso d o para obtener un diff en mi archivo en lugar de d p, lo que coloca el diff en el otro. De esa manera puedes usar u y ctrl + r como de costumbre.

Ya que los comandos de navegación de diff funcionan de la misma manera en cualquiera de los archivos, ¡debería estar listo!

siguiente dif: ]c

prev diff: [c


Realmente no hay un comando para esto, pero puedes mapear el tuyo. Coloque lo siguiente en su vimrc y luego use du para hacer operaciones de diferencia .

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