¿Cómo expandir / contraer una sección de diferencias en Vimdiff?

295

Hoy comencé a usar vimdiff y quería hacer algunas de las cosas que he dado por sentado en los editores de diferencias basados ​​en Windows (como expandir / contraer una sección de diferencias, tener una expansión completa de archivos / solo diferencias con 3 líneas de contexto arriba o a continuación, etc.). Actualmente solo conozco los siguientes comandos:

Atajos de teclado:

  • do - Obtener cambios desde otra ventana a la ventana actual.

  • dp - Coloque los cambios de la ventana actual en la otra ventana.

  • ]c - Salta al siguiente cambio.

  • [c - Salta al cambio anterior.

  • CTRL+ W, w- Cambia a la otra ventana dividida ( CTRL+ W, CTRL+ Whace lo mismo, en caso de que sueltes la CTRLtecla un poco más tarde)

¿Podría alguien señalarme en la dirección correcta para poder replicar características similares?

Sería bueno si pudiera expandir / contraer líneas alrededor de las diferencias, por ejemplo.

TCSGrad
fuente
2
Para obtener un acceso directo para agregar / revertir una larga lista de cambios, consulte stackoverflow.com/q/6093746/212942
TCSGrad
1
¡Es divertido ver que la pregunta se cierra después de más de 4 años, siendo las 3 publicaciones principales cuando se busca en Google 'vimdiff'!
TCSGrad

Respuestas:

241

Además de los que mencionas, solo los uso con frecuencia cuando difiero lo siguiente:

  • :diffupdate :diffu-> recalcula el diff, útil cuando después de hacer varios cambios, vim ya no muestra cambios mínimos. Tenga en cuenta que solo funciona si los archivos se han modificado dentro de vimdiff. De lo contrario, use:
    • :e para volver a cargar los archivos si se han modificado fuera de vimdiff.
  • :set noscrollbind-> Deshabilita temporalmente el desplazamiento simultáneo en ambos buffers, puede volver a activarlo :set scrollbindy desplazarse.

La mayoría de lo que solicitó es doblar: el capítulo del manual del usuario de vim sobre plegado . Fuera de las diferencias, a veces uso:

  • zo -> pliegue abierto.
  • zc -> cierre doble.

Pero probablemente será mejor servido por:

  • zr -> Reducción del nivel de plegado.
  • zm -> un nivel de plegado más, por favor.

o incluso:

  • zR -> Reducir completamente el plegado, dije !.
  • zM -> doblar más!

La otra cosa que solicitó, use n líneas de plegado, se puede encontrar en la sección del manual de referencia de vim sobre opciones , a través de la sección sobre diff :

  • set diffopt=<TAB>, luego actualice o agregue context:n.

También debe echar un vistazo a la sección del manual del usuario en diff .

ninjalj
fuente
Muy completo de hecho !! Verificaría los enlaces que has dicho, pero mantengo la pregunta abierta durante un par de días más para ver si recibo más respuestas (publiqué un fin de semana, y no mucha gente estaría activa en ese momento).
TCSGrad
Por cierto, ¿sabe si vimdiff se puede utilizar para fusionar / resolución de 3 vías, etc.? ¡Sería realmente genial entonces!
TCSGrad
1
@ shan23 Para la fusión de 3 vías (para git), mira esto . También hay comentarios en svn. Sin embargo, todavía intento descifrar los comandos cuando tienes 4 buffers (do / dp no funciona).
Quornian
Para :set noscrollbindque surta efecto también debe :set nocursorbindusarse, lo que no es el predeterminado. Entonces ambas opciones deben ser ajustadas.
sangriento
4

establecer vimdiff para ignorar mayúsculas y minúsculas

Habiendo comenzado vim diff con

 gvim -d main.sql backup.sql &

Encuentro que molestamente un archivo tiene palabras clave de MySQL en minúsculas y el otro en mayúscula mostrando diferencias en prácticamente todas las líneas

:set diffopt+=icase

esto actualiza la pantalla dinámicamente y puede apagarla fácilmente

zzapper
fuente
Si bien este es un buen consejo, no veo cómo se relaciona con la pregunta en cuestión (cómo expandir y contraer las secciones de diferencias en vimdiff).
Paul Stelian
0

ctrl + w, w como se mencionó se puede usar para navegar de un panel a otro.

Ahora puede seleccionar un cambio particular solo y pegarlo en el otro panel de la siguiente manera. Aquí estoy dando un ejemplo, como si quisiera cambiar mi código del panel 1 al panel 2 y actualmente mi cursor está en el panel1

  • Use Shift-v para resaltar una línea y use las teclas hacia arriba o hacia abajo para seleccionar el código que necesita y continúe desde el paso 3 escrito a continuación para pegar los cambios en el otro panel.

  • Use el modo visual y luego cámbielo

    1 haga clic en 'v', esto lo llevará al modo visual 2 use la tecla arriba o abajo para seleccionar su código requerido 3 haga clic en, Esc 'tecla de escape 4 Ahora use' yy 'para copiar o' dd 'para cortar el cambio 5 do' ctrl + w, w 'para navegar al panel2 6 haga clic en' p 'para pegar el cambio donde lo necesite

Pratheusha KK
fuente
1
La totalidad de lo que especificó (excepto la primera línea) es una característica de vim en sí, no vimdiff por decir.
TCSGrad