Confronto tra due file di testo su un sistema Windows


11

Dal momento che ediff-filese ediff-bufferscausare apply: Searching for program: no such file or directory, differrori sui computer Windows.

Come confrontare due file usando Emacs su un sistema Windows?


1
Installando GetGnuWin32, hai accesso a molti software gnu (diff, ma alos wget, sed ...). Se ti interessa solo il diff, potresti andare con gnu.org/software/diffutils
fredtantini,

Il messaggio di errore ti dice che cosa non va: non hai diffinstallato. Vai a prendere Cygwin e riprova.
itsjeyd,

@itsjeyd Cygwin è già installato sul sistema
Empty_Mind

@fredtantini Dopo aver installato GetGnuWin32 ottengo lo stesso errore
Empty_Mind

2
È sulla tua strada? Penso che la directory dovrebbe almeno essere sulla exec-pathvariabile.
Fredtantini,

Risposte:


8

Come ha detto @nanny nei commenti, la soluzione sta installando Cygwin con diffutils. Ecco come farlo:

  1. Scarica Cygwin dalla sua homepage .
  2. Installa Cygwin con il diffutils: A GNU collection of diff utilitiespacchetto. Questo pacchetto può essere trovato nella Utilssezione in uno dei pochi passaggi dell'installazione di Cygwin. installare Cygwin con diffutils
  3. Aggiungi le directory Cygwin alla variabile di sistema di Windows PATH. Questo potrebbe essere fatto:
    a) aggiungendo la propria variabile CYGWIN, per mantenere l'ordine. creando la variabile di sistema CYGWIN;
    b) e l'aggiunta della variabile appena creata alla variabile PATH di sistema.aggiunta della variabile CYGWIN alla variabile di sistema PATH

Dopo questo si è in grado di chiamare ediff-buffers, ediff-filese gli altri con successo. Che assomiglia a questo:ediff in esecuzione

Godere!


3

Se hai installato git per Windows, è sufficiente aggiungerlo

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

al tuo PERCORSO, perché è già fornito con un eseguibile diff e lo installa in quella cartella.


2

Questo potrebbe far risparmiare tempo alle persone, quindi risponderò qui. Se non si desidera aggiungere la bindirectory cygwin al proprio percorso (o una qualsiasi delle altre suggerite nelle altre risposte), è possibile impostare il percorso utilizzato dal programma ediff impostando la variabile ediff-diff-program. Ad esempio, è possibile impostarlo su C:\cygwin\bin(o qualunque sia il percorso effettivo nel proprio caso) se si utilizza cygwin. Mi ci è voluto del tempo per capire quale variabile impostare. Alcuni che NON FUNZIONANO erano: ediff-custom-diff-programe diff-command.

Per esempio:

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

lo fa.


IIRC, non puoi chiamare binari cygwin al di fuori della shell, perché non riescono a caricare alcune librerie. Penso che funzionerà solo quando Emacs viene eseguito da Cygwin, che dovrebbe avere la PATHvariabile impostata correttamente. Correggimi se sbaglio.
DoMiNeLa10

1
@ DoMiNeLa10 L'ho testato su un computer Windows 10 con Emacs 26.1 avviando emacs dalla barra delle applicazioni senza conoscere Cygwin ... funziona bene. Inoltre, la soluzione che lo aggiunge al percorso avrebbe lo stesso problema che descrivi se fosse davvero un problema.
Sturgman,

1
Mi dispiace, l'ultima parte del mio commento non è corretta. L'aggiunta al percorso non avrebbe lo stesso problema suggerito, poiché sarebbe in grado di trovare le librerie. Detto questo, ho testato l'approccio nella risposta e funziona bene.
sturgman,

0

Se non hai bisogno di produrre un diff, ma vuoi solo trovare le differenze tra i file, un modo per farlo è usare M-x compare-windowsinvece.

Aprire i due file in modo tale da visualizzarli entrambi contemporaneamente, spostare il punto all'inizio in entrambi i buffer ed eseguire M-x compare-windows. Passerà al primo punto in cui i file differiscono. Questo dovrebbe funzionare senza alcun eseguibile esterno.


1
Questo ferma il punto prima del primo carattere diverso in entrambi i file.
Empty_Mind

0

Se si utilizza il programma di installazione della riga di comando https://scoop.sh/ è possibile ottenere diffdigitando scoop install diffutilsil prompt.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.