Comparar dos archivos de texto en un sistema Windows

11

Desde ediff-filesy ediff-buffersdar como resultado un apply: Searching for program: no such file or directory, differror en las máquinas con Windows.

¿Cómo comparar dos archivos usando Emacs en un sistema Windows?

Mente vacía
fuente
1
Al instalar GetGnuWin32, tiene acceso a una gran cantidad de software gnu (diff pero también wget, sed ...). Si solo le gustan las
fredtantini
El mensaje de error te dice lo que está mal: no tienes diffinstalado. Ve a buscar a Cygwin e inténtalo de nuevo.
itsjeyd
@itsjeyd Cygwin ya está instalado en el sistema
Empty_Mind
@fredtantini Después de instalar GetGnuWin32 me sale el mismo error
Empty_Mind
2
¿Está en tu camino? Creo que el directorio debería estar al menos en la exec-pathvariable.
fredtantini

Respuestas:

8

Como @nanny dijo en los comentarios, la solución es haber instalado Cygwin con diffutils. Aquí está cómo hacerlo:

  1. Descarga Cygwin desde su página de inicio .
  2. Instale Cygwin con el diffutils: A GNU collection of diff utilitiespaquete. Este paquete se puede encontrar en la Utilssección en uno de los pocos pasos de la instalación de Cygwin. Instalar Cygwin con diffutils
  3. Agregue los directorios de Cygwin a la variable del sistema PATH windows. Esto podría hacerse:
    a) agregando su propia variable CYGWIN, para mantener el orden. crear variable de sistema CYGWIN;
    b) y agregando la variable que acaba de crear a la variable PATH del sistema.agregando la variable CYGWIN a la variable del sistema PATH

Después de esto, son capaces de llamar ediff-buffers, ediff-filesy otros con éxito. Que se parece a esto:corriendo ediff

¡Disfrutar!

Mente vacía
fuente
3

Si tiene instalado git para Windows, entonces es suficiente agregar

C:\Program Files\Git\usr\bin\

a su RUTA, porque ya viene con un ejecutable diff y lo instala en esa carpeta.

Zorro Volador
fuente
2

Esto puede ahorrarle tiempo a la gente, así que responderé aquí. Si no desea agregar el bindirectorio cygwin a su ruta (o cualquiera de los otros sugeridos en las otras respuestas), puede establecer la ruta del programa que utiliza ediff configurando la variable ediff-diff-program. Por ejemplo, podría establecerlo en C:\cygwin\bin(o cualquiera que sea la ruta real en su caso) si usa cygwin. Me llevó algo de tiempo averiguar qué variable establecer. Algunos que NO funcionaron fueron: ediff-custom-diff-programy diff-command.

Por ejemplo:

(setq ediff-diff-program "c:/CYGWIN64/bin/diff.exe")

lo hace.

Sturgman
fuente
IIRC, no puede llamar a los binarios de cygwin fuera del shell, porque no pueden cargar algunas bibliotecas. Creo que esto solo funcionará cuando Emacs se ejecute desde Cygwin, que debería tener la PATHvariable configurada correctamente. Corrígeme si estoy equivocado.
DoMiNeLa10
1
@ DoMiNeLa10 Lo probé en una máquina con Windows 10 con Emacs 26.1 al iniciar emacs desde la barra de tareas sin saber acerca de Cygwin ... funciona bien. Además, la solución que lo agrega a la ruta tendría el mismo problema que usted describe si realmente fuera un problema.
Sturgman
1
Lo siento, la última parte de mi comentario es incorrecta. Agregarlo a la ruta no tendría el mismo problema que sugiere, ya que podría encontrar las bibliotecas. Dicho esto, probé el enfoque en la respuesta y funciona bien.
Sturgman
0

Si no necesita producir un diff, pero solo quiere encontrar las diferencias entre los archivos, una forma de hacerlo es usarlo M-x compare-windows.

Abra los dos archivos de modo que los vea a ambos al mismo tiempo, mueva el punto al principio en ambos búferes y ejecute M-x compare-windows. Se moverá el punto al primer lugar donde los archivos difieren. Esto debería funcionar sin ningún ejecutable externo.

legoscia
fuente
1
Esto detiene el punto antes del primer carácter diferente en ambos archivos.
Empty_Mind
0

Si usa el instalador de línea de comandos https://scoop.sh/ puede obtenerlo diffescribiendo scoop install diffutilssu solicitud.

Cesc
fuente