Necesito mostrar diferencias de palabras de varias cadenas pequeñas.
Es decir, tengo una lista de pares similar a la siguiente:
"aaa bbb ccc" . "aaa vv ccc"
"abcd ef ghkl" . "ghkl"
"a (u -> h)" . "(a -> g) (u -> h)"
En cada caso, me gustaría resaltar el texto modificado o agregado. Puedo hacer esto con muchas llamadas al comando diff, pero tengo miedo del costo.
¿Hay bibliotecas elisp que podría usar para este propósito?
wdiff <(echo "abc def ghi" ) <(echo "abc ghi")
=>abc [-def-] ghi
. Pero eso depende de tener instalados wdiff y diffutils, lo que no ayudará si está creando algo para uso general en Windows, por lo que supongo que necesita una solución elisp.Respuestas:
No creo que exista una solución de Elisp para eso. Pero si miras cómo lo implementé
smerge-refine-subst
(también lo utilicédiff-refine-hunk
), debería darte una idea de cómo puedes jugardiff
.IOW debería poder ejecutar un solo
diff
proceso para manejar todas sus líneas a la vez, concatenando y agregando "líneas de sincronización" en el medio. Además, para evitardiff
confundirse cuando las líneas de un par coinciden con las líneas de otro par, es probable que desee anteponer algún texto (exclusivo de cada par) delante de cada línea.fuente
diff-refine-hunk
? Podría crear un archivo diff falso con cada par, y luego llamar a refine-hunk en cada uno.smerge-refine-subst
(que es lo que utiliza internamentediff-refine-hunk
. Pero eso ejecuta undiff
proceso, por lo que si desea ejecutar un único diferencial para todos los pares, deberá masajear su entrada a mano.