plugin - Diff de versión actual y anterior usando vim-fugitive
vim color plugin (9)
Sé que :Glog
llenará la lista de soluciones rápidas con todas las versiones del archivo en el búfer actual y que puedo presionar <enter>
en estas para ver el archivo en esa versión en particular, pero hay una manera fácil de ver la diferencia de una versión particular con la versión anterior (para ver fácilmente qué ha cambiado)?
EDITAR: Lo que busco es ver cada uno de estos cambios en una diferencia vertical en vim: git log -p -- path/to/file.txt
.
Para diferenciar con su versión anterior, sigue estos pasos:
- usa
Glog
- navega a la versión deseada
- tipo
C
, que abre el commit - vaya a la línea que contiene
diff --git a/you/file b/you/file
y presione<cr>
Además, para diferenciar una versión anterior con la versión en índice (la versión de trabajo), puede hacer esto:
- usa
Glog
- navega a la versión deseada
- Usa
Gdiff
en esta nueva ventana sin parámetro. ¡Hecho!
Gdiff
sin parámetro diferenciará el búfer actual con el del índice , que es exactamente lo que desea
También puede considerar el uso del complemento vim-unimpaired , que proporciona dos mapas ]q
y [q
para navegar por la lista de soluciones rápidas. (También ]Q
y [Q
)
Creo que es tan simple como:
:vert diffsplit #
Cuando use :Glog
, simplemente presione <cr>
en la línea que comienza diff --git
. Se abrirá el diff. Es posible que también desee mirar en :Gdiff
. Es posible que desee ver las vimcasts Drew Neil, The Fugitive Series .
Para más ayuda ver
:h fugitive
:h :Glog
:h :Gdiff
En primer lugar, abra el archivo que desea diferenciar.
Si se confirma el cambio, ingrese :Gdiff HEAD~1
.
Si el cambio NO está confirmado, ingrese :Gdiff HEAD
.
Escribí una función que te permite diferenciar una revisión previa del archivo actual. Lo uso para ver la diferencia entre la copia de trabajo y las revisiones "n" veces atrás.
Aquí está el código para poner en tu .vimrc (requiere https://github.com/tpope/vim-fugitive ):
"Diff the current file against n revision (instead of n commit)
function! Diffrev(...)
let a:target = @%
"check argument count
if a:0 == 0
"no revision number specified
let a:revnum=0
else
"revision number specified
let a:revnum=a:1
endif
let a:hash = system(''git log -1 --skip=''.a:revnum.'' --pretty=format:"%h" '' . a:target)
execute ''Gdiff'' . a:hash
endfunc
Puede llamar a la función de esta manera (el ejemplo siguiente difiere contra la tercera revisión posterior):
:call Diffrev(2)
Esto es lo que uso:
:Gdiff [revision]
Ver :help Gdiff
para otras opciones también (divisiones verticales frente a horizontales, etc.).
Por ejemplo:
:Gdiff HEAD
o si tiene un número de revisión (es decir, aaffdfdstsdgssetds):
:Gdiff aaffdfds
No conseguí que el fugitivo hiciera lo que quiero (o bien no lo hace o no sé cómo usarlo), pero encontré el complemento que da el comportamiento deseado: https://github.com/kablamo/vim-git-log .
(no muestra la diferencia en la lista de soluciones rápidas, sino en un búfer de tamaño completo, lo cual está bien)
Puedes lograr esto siguiendo estos pasos:
- Cambie el enfoque a la ventana de corrección rápida y navegue a la línea correspondiente al compromiso que le interesa.
- Encuentre el hash de confirmación en la línea y tire de él (el hash está ahora en el registro
0
. - Cierre el búfer de corrección rápida y haga
:Gdiff <Cr>0
.
Eso debería encender el diff apropiado.
Puede automatizar los pasos 2 y 3 agregando esta asignación a su archivo .vimrc
:
nnoremap <Leader>gd //.git<CR>wwwyw<Esc>:cclose<CR>:Gdiff <C-r>0<CR>
Observe que la asignación asume que su cursor está al principio de la línea (antes de la parte .git//
).
Una forma de ver la diferencia de un commit es esta:
:Gedit [revision]