Comparaison de deux fichiers texte sur un système Windows

11

Depuis ediff-fileset ediff-buffersentraîner une apply: Searching for program: no such file or directory, differreur sur les machines Windows.

Comment comparer deux fichiers en utilisant Emacs sur un système Windows?

Un esprit vide
la source
1
En installant GetGnuWin32, vous avez accès à de nombreux logiciels gnu (diff mais alos wget, sed…). Si vous ne vous souciez que des diff, vous pouvez aller sur gnu.org/software/diffutils
fredtantini
Le message d'erreur vous indique ce qui ne va pas: vous n'avez pas diffinstallé. Allez chercher Cygwin et réessayez.
itsjeyd
@itsjeyd Cygwin est déjà installé sur le système
Empty_Mind
@fredtantini Après avoir installé GetGnuWin32, je reçois la même erreur
Empty_Mind
2
Est-ce sur votre chemin? Je pense que le répertoire devrait au moins être sur la exec-pathvariable.
fredtantini

Réponses:

8

Comme l'a dit @nanny dans les commentaires, la solution est d'avoir installé Cygwin avec diffutils. Voici comment faire:

  1. Téléchargez Cygwin depuis sa page d'accueil .
  2. Installez Cygwin avec le diffutils: A GNU collection of diff utilitiespackage. Ce package peut être trouvé dans la Utilssection dans l'une des quelques étapes de l'installation de Cygwin. installation de Cygwin avec diffutils
  3. Ajoutez les répertoires Cygwin à la variable système Windows PATH. Cela pourrait être fait en:
    a) ajoutant votre propre variable CYGWIN, pour conserver l'ordre. création d'une variable système CYGWIN;
    b) et en ajoutant la variable que vous venez de créer à la variable système PATH.ajout de la variable CYGWIN à la variable système PATH

Après cela, vous êtes en mesure d'appeler ediff-buffers, ediff-fileset d'autres avec succès. Qui ressemble à ceci:courir ediff

Prendre plaisir!

Un esprit vide
la source
3

Si vous avez installé git pour windows, il suffit d'ajouter

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

à votre PATH, car il est déjà livré avec un exécutable diff et l'installe dans ce dossier.

Renard volant
la source
2

Cela peut faire gagner du temps aux gens, je vais donc répondre ici. Si vous ne souhaitez pas ajouter le binrépertoire cygwin à votre chemin (ou l'un des autres suggérés dans les autres réponses), vous pouvez définir le chemin du programme utilisé par ediff en définissant la variable ediff-diff-program. Par exemple, vous pouvez le définir C:\cygwin\bin(ou quel que soit le chemin réel dans votre cas) si vous utilisez cygwin. Il m'a fallu un certain temps pour déterminer quelle variable définir. Certains qui n'ont PAS fonctionné étaient: ediff-custom-diff-programet diff-command.

Par exemple:

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

le fait.

sturgman
la source
IIRC, vous ne pouvez pas appeler les binaires cygwin en dehors du shell, car ils ne parviennent pas à charger certaines bibliothèques. Je pense que cela ne fonctionnera que lorsque Emacs est exécuté à partir de Cygwin, qui devrait avoir la PATHvariable correctement définie. Corrige moi si je me trompe.
DoMiNeLa10
1
@ DoMiNeLa10 Je l'ai testé sur une machine Windows 10 avec Emacs 26.1 en démarrant emacs à partir de la barre des tâches sans connaître Cygwin ... fonctionne très bien. De plus, la solution l'ajoutant au chemin aurait le même problème que vous décrivez si c'était vraiment un problème.
sturgman
1
Je suis désolé, la dernière partie de mon commentaire est incorrecte. L'ajouter au chemin n'aurait pas le même problème que vous suggérez, car il pourrait trouver les bibliothèques. Cela dit, j'ai testé l'approche dans la réponse et cela fonctionne bien.
sturgman
0

Si vous n'avez pas besoin de produire un diff, mais souhaitez simplement trouver les différences entre les fichiers, une façon de le faire est d'utiliser à la M-x compare-windowsplace.

Ouvrez les deux fichiers de manière à les voir tous les deux en même temps, déplacez le point au début dans les deux tampons et exécutez M-x compare-windows. Il déplacera le point vers le premier endroit où les fichiers diffèrent. Cela devrait fonctionner sans aucun exécutable externe.

legoscia
la source
1
Cela arrête le point avant le premier caractère différent dans les deux fichiers.
Empty_Mind
0

Si vous utilisez le programme d'installation en ligne de commande https://scoop.sh/, vous pouvez l'obtenir diffen tapant scoop install diffutilsvotre invite.

Cesc
la source