2011-04-25 21 views
5

Estoy trabajando en una secuencia de comandos que se ha vuelto bastante intrincada. Sospecho que hay varias secciones que tienen un código casi idéntico. ¿Puedo (y cómo puedo) abrir el archivo en vim, con dos (o más) ventanas en el búfer, y diferir los contenidos de las ventanas en el mismo archivo? vimdiff parece funcionar solo en dos archivos. Si hago una copia del archivo e intento modificar las dos versiones, el origen del diff permanece bloqueado al principio del archivo. Aunque puedo deslizar las ventanas sin abrir, y mover las ventanas a las partes del archivo que quiero comparar, las diferencias no se muestran. ¿Algún consejo o sugerencia? Podría cortar y pegar las secciones que quiero comparar con diferentes archivos y luego aplicar vimdiff, pero luego corro el riesgo de perderme en la sección de donde traté de parchar los archivos por separado, y estoy seguro de que debe haber una forma más directa. , manera más fácil.Ventanas diferenciadas en vim

Respuesta

2

lo que suelo hacer es diff a una copia

:%w %.alt 
:vert diffsplit %.alt 

Y luego happiliy reorganizar la versión 'alt' de manera que los bits seudo-juego quedan alineados.


Tenga en cuenta que (presumiblemente) contiene git merge/diff vaca-poderes spiffy que deberían ser capaces de detectar sub-archivo se trasladó cambia bloque.

Aunque todavía no he puesto esto en práctica, tengo la corazonada de que el muy buen plugin git fugitive para vim podría aprovechar algunos de estos caballos de fuerza para hacer esto más fácil. Nota: totalmente de esperar que esto requiere scriptinh antes de ser utilizable, pero yo todavía pensaba que sería bueno compartir esta idea

+0

De acuerdo, usar% para referirme al nombre del archivo del búfer actual es bueno, ¡no estaba al tanto de eso! Pero todavía no estoy seguro de cómo reorganizar la versión derecha para que los bits coincidentes se alineen. : se noscrollbind parece ayudar, pero ¿cómo puedo obtener vim para resaltar las diferencias entre las dos ventanas? – ChrisDR

+0

Me refiero a reordenar literalmente (uso C/C#, entonces 'd2] M' elimina dos métodos, navega al punto de inserción,' P' y voila); Además, la 'versión alternativa derecha' era un error tipográfico para 'versión alternativa'. Sé que esto todavía es trabajo manual, pero (aparte de la idea de usar la detección de copiar/mover de Git) no conozco una mejor manera. El truco para usar una copia temporal es bastante prolijo. – sehe

1

Como alternativa (quizás puede compartir una secuencia de comandos si se llega a él primero!) La solución que he estado usando ocasionalmente y que funciona muy bien en mi opinión es linediff.vim.

Le permite usar el modo visual para seleccionar dos cuerpos de texto de búferes arbitrarios (o lo mismo para ese caso) y ejecutar vimdiff en ellos. Lo mejor de todo es que, al editar y guardar los búfers de diff temporales, actualiza los búferes originales con los cambios, sin guardarlos.

Uno de mis casos de uso es cuando estoy resolviendo problemas de fusión relacionados con la refacturación y el reordenamiento de scripts, donde una función se ha movido y quizás también se ha modificado. Para asegurarte de que no pierdes ninguna de las modificaciones que vienen de ninguno de los dos antecesores, difieres las dos versiones de la función solo al seleccionarlas visualmente y ejecutar el comando alineado.

Cuestiones relacionadas