Сравнение двух текстовых файлов в системе Windows

11

Так как ediff-filesи ediff-buffersпривести к apply: Searching for program: no such file or directory, diffошибке на Windows-машинах.

Как сравнить два файла с помощью Emacs в системе Windows?

Empty_Mind
источник
1
Устанавливая GetGnuWin32, вы получаете доступ к большому количеству программного обеспечения gnu (diff, но alos wget, sed…). Если вы заботитесь только для сравнения, вы могли бы пойти с gnu.org/software/diffutils
fredtantini
Сообщение об ошибке говорит вам, что не так: вы не diffустановили. Принеси Cygwin и попробуй еще раз.
itjeyd
@itsjeyd Cygwin уже установлен в системе
Empty_Mind
@fredtantini После установки GetGnuWin32 я получаю ту же ошибку
Empty_Mind
2
Это на вашем пути? Я думаю, что каталог должен быть хотя бы на exec-pathпеременной.
Фредантини

Ответы:

8

Как сказал @nanny в комментариях, решение установило Cygwin с diffutils. Вот как это сделать:

  1. Загрузите Cygwin со своей домашней страницы .
  2. Установите Cygwin с diffutils: A GNU collection of diff utilitiesпакетом. Этот пакет можно найти в Utilsразделе одного из нескольких этапов установки Cygwin. установка Cygwin с помощью diffutils
  3. Добавьте каталоги Cygwin в системную переменную Windows PATH. Это может быть сделано путем:
    а) добавления вашей собственной переменной CYGWIN, чтобы сохранить порядок. создание системной переменной CYGWIN;
    б) и добавление только что созданной переменной в системную переменную PATH.добавление переменной CYGWIN к системной переменной PATH

После этого вы можете позвонить ediff-buffers, ediff-filesи другие успешно. Который выглядит примерно так:бегущий эдиф

Наслаждайтесь!

Empty_Mind
источник
3

Если у вас установлен git для Windows, то достаточно добавить

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

в ваш путь, потому что он уже поставляется с исполняемым файлом diff и устанавливает его в эту папку.

Летающий лис
источник
2

Это может сэкономить людям время, поэтому я отвечу здесь. Если вы не хотите добавлять binкаталог cygwin к своему пути (или любой другой из предложенных в других ответах), вы можете установить путь, используемый программой, которую использует ediff, установив переменную ediff-diff-program. Например, вы можете установить его C:\cygwin\bin(или любой другой фактический путь в вашем случае), если используете cygwin. Мне потребовалось некоторое время, чтобы выяснить, какую переменную установить. Некоторые, которые НЕ работали, были: ediff-custom-diff-programи diff-command.

Например:

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

Является ли.

sturgman
источник
IIRC, вы не можете вызывать бинарные файлы cygwin вне оболочки, потому что они не могут загрузить некоторые библиотеки. Я думаю, что это будет работать только тогда, когда Emacs запускается из Cygwin, в котором должна быть PATHправильно установлена ​​переменная. Поправьте меня если я ошибаюсь.
DoMiNeLa10
1
@ DoMiNeLa10 Я протестировал его на компьютере с Windows 10 с Emacs 26.1, запустив emacs с панели задач, не зная о Cygwin ... работает отлично. Кроме того, решение, добавляющее его в путь, будет иметь ту же проблему, которую вы описали, если бы это была действительно проблема.
sturgman
1
Извините, последняя часть моего комментария неверна. Добавление его в путь не приведет к той же проблеме, которую вы предлагаете, так как он сможет найти библиотеки. Тем не менее, я проверил подход в ответе, и он работает хорошо.
sturgman
0

Если вам не нужно создавать diff, а просто хотите найти различия между файлами, один из способов сделать это - использовать M-x compare-windowsвместо этого.

Откройте два файла так, чтобы вы видели их оба одновременно, переместите точку в начало в обоих буферах и запустите M-x compare-windows. Это переместит точку в первое место, где файлы различаются. Это должно работать без какого-либо внешнего исполняемого файла.

legoscia
источник
1
Это останавливает точку перед первым отличающимся символом в обоих файлах.
Empty_Mind
0

Если вы используете установщик командной строки https://scoop.sh/, вы можете получить diffего, набрав scoop install diffutilsв командной строке.

Сеск
источник