2011-03-13 11 views
277

Empecé a usar vimdiff hoy, y quería hacer algunas de las cosas que daba por sentado en los editores de diferencias basados ​​en Windows (como expandir/contraer una sección de diff, tener expansión completa de archivos/solo diffs con 3 líneas de contexto arriba o abajo, etc.). Actualmente sólo conozco los siguientes comandos:¿Cómo expandir/colapsar una sección de diferencia en Vimdiff?

Atajos de teclado:

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

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

  • ]c - salto a la siguiente cambio.

  • [c - Saltar al cambio anterior.

  • CTRL + W, w - Cambiar a la otra ventana dividida (CTRL + W, CTRL + W hace lo mismo cosa, en caso de que vamos a ir del CTRL clave un poco más tarde)

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

Sería bueno si pudiera expandir/colapsar líneas alrededor de los diffs, por ejemplo.

+2

para un atajo para agregar/revertir una larga lista de cambios, consulte http://stackoverflow.com/q/6093746/212 942 – TCSGrad

+0

Ver: [Usar vimdiff como git mergetool] (http://www.rosipov.com/blog/use-vimdiff-as-git-mergetool/) y [vimdiff - la forma genial de diferenciar para usuarios de vim] (http : //gingerjoos.com/blog/linux/vimdiff-the-cool-way-to-diff-for-vim-users) – kenorb

+1

Es divertido ver que la pregunta se cierra después de más de 4 años, siendo los 3 primeros mensajes cuando 'vimdiff' se busca en Google! – TCSGrad

Respuesta

207

Aparte de los que mencionas, yo sólo uso frecuente cuando se diferencian los siguientes:

  • :diffupdate:diffu -> volver a calcular el diff, útil cuando después de hacer varios cambios de vim no muestra cambios mínimos más. 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 habilitar por :set scrollbind y desplazarse.

La mayor parte de lo que solicitó es plegable: vim user manual's chapter on folding. Fuera de diffs uso en algún momento:

  • zo -> abrir pliegue.
  • zc -> cerrar fold.

Pero es probable que ser mejor servido por:

  • zr -> reducir el nivel de plegado.
  • zm -> un nivel más de plegado, por favor.

o incluso:

  • zR -> Reducir completamente el plegamiento, dije !.
  • zM -> pliegue ¡Más !.

La otra cosa que usted pidió, el uso n líneas de plegado, se puede encontrar en la vim reference manual section on options, a través de la section on diff:

  • set diffopt=<TAB>, a continuación, actualizar o añadir context:n.

También debería echar un vistazo al user manual section on diff.

+0

Muy completo de hecho !! Verificaría los enlaces que dijiste, pero mantendré la pregunta abierta por un par de días más para ver si obtengo más respuestas (publiqué un fin de semana y no muchas personas estarían activas en ese momento). – TCSGrad

+0

Por cierto, ¿sabes si vimdiff se puede utilizar para la fusión/resolución de 3 vías, etc.? ¡Sería realmente genial entonces! – TCSGrad

+1

@ shan23 Para combinar en 3 vías (para git), marque [this] (http://www.toofishes.net/blog/three-way-merging-git-using-vim/) fuera. Hay comentarios allí en svn también. Aún estoy tratando de descifrar los comandos cuando tienes 4 búferes (do/dp no funciona). – quornian

3

En realidad, si lo hace Ctrl+W W, no tendrá que agregar ese extra Ctrl. Hace lo mismo

+13

Encuentro^W^W mucho más rápido para escribir rápidamente que^W w. – hobbs

+0

Pensé que esto valdría la pena mencionar https://github.com/ankr/dotfiles/blob/master/files/vimrc#L103 – ankr

4

conjunto vimdiff ignorar caso

Después de haber iniciado diff vim con

gvim -d main.sql backup.sql & 

me parece que era un fastidio que un archivo tiene palabras clave de MySQL en minúsculas los demás Presentación de las diferencias en mayúsculas en prácticamente cada dos líneas

:set diffopt+=icase 

esto actualiza la pantalla dinámicamente & puede simplemente desactivarlo nuevamente

0

ctrl + w, w como se menciona se puede utilizar para navegar de panel a panel.

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

  • uso Shift-v para resaltar una línea y el uso de las llaves o abajo para seleccionar la pieza de código que necesita y continúe desde el paso 3 por escrito abajo para pegar los cambios en el otro panel.

  • Uso modo visual y luego cambiarlo

    1 Haga clic en 'v' esto le llevará a modo visual 2 usar teclas de arriba y abajo para seleccionar el código necesario 3 clic en la Esc' tecla de escape 4 Ahora use 'yy' para copiar o 'dd' para cortar el cambio 5 do 'ctrl + w, w' para navegar a pane2 6 haga clic en 'p' para pegar su cambio donde se requiere

+0

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

Cuestiones relacionadas