- Delta es una herramienta que añade resaltado de sintaxis y funciones de visor paginado a la salida de Git, diff y grep para ayudar a leer los diff de forma más eficiente y agradable
- En la mayoría de los gestores de paquetes, el nombre del paquete es git-delta, pero el ejecutable es
delta, y se puede usar como pager de Git configurando core.pager = delta en ~/.gitconfig
- Entre sus funciones principales están los mismos temas de resaltado de sintaxis que bat, resaltado de diff por palabra basado en inferencia de edición de Levenshtein, vista comparativa lado a lado, números de línea, navegación con
n/N y una mejor visualización de conflictos de fusión
- También resalta la salida de
git blame, rg, git grep y grep, y con --hyperlinks puede generar hashes de commit en formato de enlace para proveedores de hosting como GitHub, GitLab, SourceHut y Codeberg
- Puede mantenerse muy cerca de la salida predeterminada de Git/diff o cambiar mucho el diseño y el estilo, lo que permite ajustar con detalle el entorno de revisión de diff dentro de la terminal
Qué hace Delta
- Delta es un visor paginado con resaltado de sintaxis para la salida de Git, diff y grep
- Su objetivo es hacer que el tiempo dedicado a leer diff en entornos donde el código cambia constantemente sea más eficiente y agradable
- Permite cambiar ampliamente el diseño y estilo de los diff, o si se prefiere, mantenerlos muy cerca de la salida predeterminada de Git/diff
Instalación y configuración básica
- La documentación de instalación está disponible en Install it
- En la mayoría de los gestores de paquetes, el nombre del paquete es git-delta y el nombre del ejecutable es
delta
- Puedes añadir la siguiente configuración a
~/.gitconfig para usarlo como pager de Git y como filtro de diff interactivo
[core]
pager = delta
[interactive]
diffFilter = delta --color-only
[delta]
navigate = true # use n and N to move between diff sections
dark = true # or light = true, or omit for auto-detection
[merge]
conflictStyle = zdiff3
- La misma configuración también se puede aplicar con el comando
git config --global
git config --global core.pager delta
git config --global interactive.diffFilter 'delta --color-only'
git config --global delta.navigate true
git config --global delta.dark true # or `delta.light true`, or omit for auto-detection
git config --global merge.conflictStyle zdiff3
- La ayuda está disponible con
delta -h, el manual completo con delta --help, y la documentación en línea en user manual
Funciones para leer diff
- El resaltado de sintaxis usa los mismos temas de resaltado que bat
- El resaltado de diff por palabra usa el algoritmo de inferencia de edición de Levenshtein
- Soporta vista comparativa lado a lado y ajuste de línea
- Soporta mostrar números de línea
- Es posible moverse entre archivos en diff grandes y entre diff en vistas de
log -p con las teclas n y N
- Esta función se activa con
--navigate
- También procesa la salida tradicional de unified diff junto con la salida de Git
- Puede detectar automáticamente fondos claros/oscuros en la terminal
Modos de visualización y temas
- Los temas de resaltado de sintaxis disponibles en bat también pueden usarse en Delta
delta --show-syntax-themes --dark
delta --show-syntax-themes --light
- La vista comparativa lado a lado está documentada en Side-by-side view user manual
[delta]
side-by-side = true
- La vista lado a lado activa por defecto los números de línea y aplica resaltado de sintaxis en los paneles izquierdo y derecho
- La vista lado a lado ajusta automáticamente las líneas largas
- La función de números de línea está documentada en Line numbers user manual
[delta]
line-numbers = true
Soporte según tarea de Git
- La visualización de conflictos de fusión se ofrece en un formato mejorado, y la documentación relacionada está en Merge conflicts user manual
- La salida de git blame admite resaltado de sintaxis y, al usar
--hyperlinks, puede convertir commits en enlaces con formato del proveedor de hosting
- Proveedores de hosting compatibles: GitHub, GitLab, SourceHut, Codeberg
- Documentación relacionada: Git blame user manual
- También resalta la salida de grep como
rg, git grep y grep
- Soporta la función
--color-moved de Git
Estilos y modo de compatibilidad
- Se puede copiar código directamente desde el diff, y los marcadores
-/+ se eliminan por defecto
- Ofrece modos de emulación de
diff-highlight y diff-so-fancy
- Los hashes de commit pueden enlazarse a páginas del proveedor de hosting usando el formato de hyperlinks de la terminal
- Las rutas de archivo también pueden convertirse en enlaces que el sistema operativo puede abrir
- Se puede dar estilo a las decoraciones de caja/línea que llaman la atención sobre las secciones de encabezado de commit, archivo y hunk
- Soporta cadenas de estilo con color de primer plano, color de fondo y atributos de fuente para más de 20 elementos de estilo
- El lenguaje de estilos usa el mismo lenguaje de color/estilo que Git
1 comentarios
Comentarios en Hacker News
Delta era una de esas herramientas que configuras una vez y luego te olvidas; hace tiempo que no veo la salida “cruda” de
git grep/diff/blameTambién la uso siempre para diffs comunes fuera de repositorios Git, y hoy me enteré de que también se puede usar con
ripgrephttps://dandavison.github.io/delta/grep.html
Lo mismo con bat, que ya mencionaron: otra herramienta de configurar una vez y olvidarte; le puse el alias
batacat, y dejé elcat“original” de/usr/bin/catcon el aliasvcathttps://github.com/sharkdp/bat
\catSigo acordándome de una observación muy buena que vi hace tiempo: el resaltado de sintaxis actual está resaltando lo equivocado
La sintaxis los humanos ya la distinguimos bien, así que en vez de colorear la gramática habría que resaltar los símbolos. Si cada nombre de variable y función tuviera un color distinto, el objetivo dejaría de ser “esto es un símbolo” y pasaría a ser “distinguir símbolos diferentes más rápido”
Pero como esto es mucho más difícil que decorar la sintaxis, parece que las herramientas se quedan en lo fácil en vez de en lo más útil. El resaltado sintáctico ayuda bastante, claro, pero me gustaría ver si un motor de emparejamiento de símbolos realmente funciona bien
No recuerdo dónde leí el texto original, así que no puedo citar bien la fuente
Buscando encontré este artículo: https://www.wilfred.me.uk/blog/2014/09/27/the-definitive-gui...
Creo que existía incluso antes, pero la explicación más antigua que pude encontrar es de 2009: https://zwabel.wordpress.com/2009/01/08/c-ide-evolution-from...
https://difftastic.wilfred.me.uk/
https://github.com/Wilfred/difftastic
En lo personal uso color-identifiers-mode en Emacs
https://github.com/ankurdave/color-identifiers-mode
No me convence del todo esa lógica, pero sí me da algo de curiosidad
A veces resalto manualmente una variable para seguirle el rastro y comprobar si no me perdí algún uso, así que entiendo perfectamente ese caso. Lo que no sé es si habrá suficientes colores y contraste como para seguir varias variables al mismo tiempo, y también podría terminar ensuciando la pantalla
Como punto medio, quizá podría servir un enfoque donde se coloreen manualmente hasta unas 3 variables. Aunque si hace falta esa ayuda, tal vez ya sea una señal de que el código de por sí no es muy legible. Claro, ayudar a lidiar con codebases desordenadas también es un uso totalmente válido
No es nada vistoso, pero si solo necesitas un diff por palabras decente usando
gitestándar, muchas veces esto bastagit diff --color-words --word-diff-regex='\w+|.'.gitconfig?Delta hace muy bien su trabajo, pero siempre me topaba con el problema de que cortaba las líneas largas
Vi este artículo y revisé si eso había cambiado, y sí cambió. Ahora, si configuras
git config --global --replace-all delta.max-line-length 0, ya no corta las líneasNo entiendo muy bien por qué eso no es el valor por defecto. La discusión del cambio está en https://github.com/dandavison/delta/pull/290
Resaltar sintaxis en líneas muy largas, por ejemplo archivos
.jsminificados, puede volverse muy lento si no las cortaYa que salió el tema de los diffs, algo de la salida diff de Git que me molesta es que imprime la ruta del archivo empezando con dos nombres de archivo, como el diff tradicional de Unix
--- a/some/path/to/file.c+++ b/some/path/to/file.cEn iTerm muchas veces abro archivos en el editor con
cmd-clic, pero aquí no funciona por los prefijosa/yb/. ¿Hay alguna forma de hacer que Git formatee mejor los nombres de archivo? Ni siquiera hacen falta esas dos líneasgit config --global diff.noprefix truePara otras opciones relacionadas con prefijos, revisa el manual
Uso delta y difftastic mezclados, y ambos son excelentes
En especial difftastic: aunque es un poco lento, es muy bueno con la sintaxis AST de tree-sitter, y un diff que entiende el AST realmente se siente muy bien
Delta es limpio y muy rápido
Buen tip para activar o desactivar la función side-by-side de Delta según el tamaño de la ventana. Aquí está en bash; para otros shells, adáptalo por tu cuenta
function delta_sidebyside {if [[ COLUMNS -ge 120 ]]; thenDELTA_FEATURES='side-by-side'elseDELTA_FEATURES=''fi}trap delta_sidebyside WINCH$antes deCOLUMNS, y probablemente también hace faltaexportantes de asignarDELTA_FEATURESUso tanto delta como difftastic, y por más que los recomiende se queda corto
Si usas aunque sea un poco la terminal, vale la pena instalarlos
Ambos tienen soporte en Magit de Emacs, y también en Lazygit
También vale la pena revisar tig: https://jonas.github.io/tig/
Como llevo tiempo usando
git diffnormal con colores, quiero querer esto, pero se ve demasiado complejoAclaro que es mi proyecto
git difforiginal tuviera un problema en particular