¿Existe un modo Emacs que destaque las diferencias con la versión comprometida?

31

Una característica que tiene Xcode que creo que es bastante clara es el modo "Comparación", que muestra continuamente las diferencias entre el búfer actual y la confirmación más reciente.

Modo de comparación

¿Hay algo así para Emacs? Realmente no me importan las vistas simultáneas de lado a lado. Simplemente resaltar el fondo de las líneas que se modificaron sería de gran ayuda.

Sé que siempre puedo hacerlo C-x v =, pero es una vista estática de un punto en el tiempo, y solo muestra las diferencias. Quiero ver mi archivo completo, editable, con las diferencias resaltadas.

Conocer
fuente

Respuestas:

30

La biblioteca diff-hl de Dmitry Gutov proporciona diff-hl-mode, que le brinda el resaltado marginal que se muestra en la ventana superior en la siguiente captura de pantalla (con el diff real que se muestra en la ventana inferior para comparar):

captura de pantalla de diff-hl

Utiliza la vcfuncionalidad genérica en Emacs para ser independiente de VCS. El archivo Léame dice "Probado con Git, Mercurial, Bazaar y SVN. También puede funcionar con otros backends de VC".

Tenga en cuenta que diff-hl-margin-modepuede emplearse si está utilizando la terminal Emacs en lugar de la GUI Emacs.

Por defecto diff-hlsolo resalta las diferencias entre el archivo guardado y el repositorio; pero también diff-hl-flydiff-modepermite resaltar las diferencias no guardadas, para que pueda ver los cambios mientras edita.

También tenga en cuenta el incorporado (a Emacs estándar) highlight-changes-mode. Eso realmente no aborda su problema de forma inmediata, pero las highlight-compare-*funciones pueden facilitar una solución.

phils
fuente
# 33 ha sido resuelto.
Dmitry
1
Dmitry: De hecho - en realidad, he estado tratando a cabo en los últimos días, y puedo confirmar que esta característica funciona muy bien :)
PHILS
Me alegra oírlo; Fue escrito por un colaborador muy paciente. Gracias por actualizar la respuesta!
Dmitry
10

No especifica qué sistema de control de versiones está utilizando, pero si es git, puede usar git-gutter para colocar un indicador en los márgenes cuando se ha agregado, eliminado o modificado una línea. Está disponible en MELPA a través de M-x package-install git-gutter.

erikstokes
fuente
Esto se parece bastante a lo que estaba imaginando, pero parece que solo actualiza la canaleta cuando se guarda el búfer. Me pregunto qué tan difícil sería integrarse (o actuar más como) flymake ...
Ken
10

Deberías echarle un vistazo a Ediff . Puede mostrar diferencias y actuar como una herramienta de fusión (3 vías). Le permite revertir fácilmente los cambios y también resalta las diferencias refinadas para mostrarle solo las partes de cada trozo que realmente cambiaron.

captura de pantalla de ediff

ediff-revision le permitirá comparar fácilmente con la confirmación más reciente o cualquier confirmación anterior.

Lily Chung
fuente