Порівняння двох текстових файлів у системі Windows


11

Так ediff-filesі ediff-buffersпризводить до apply: Searching for program: no such file or directory, diffпомилок на машинах Windows.

Як порівняти два файли за допомогою Emacs в системі Windows?


1
Встановивши GetGnuWin32, у вас є доступ до багатьох програмних засобів gnu (розл., Але alos wget, sed…). Якщо ви дбаєте лише про відмінності, ви можете піти з gnu.org/software/diffutils
fredtantini

Повідомлення про помилку повідомляє, що не так: у вас не diffвстановлено. Ідіть, знайдіть Cygwin і спробуйте ще раз.
itsjeyd

@itsjeyd Cygwin вже встановлений у системі
Empty_Mind

@fredtantini Після встановлення GetGnuWin32 я отримую ту ж помилку
Empty_Mind

2
Це на вашому шляху? Я думаю, що каталог повинен бути принаймні на exec-pathзмінній.
fredtantini

Відповіді:


8

Як заявив @nanny в коментарях, рішення встановлює Cygwin з дифузорами. Ось як це зробити:

  1. Завантажте Cygwin зі своєї домашньої сторінки .
  2. Встановіть Cygwin разом із diffutils: A GNU collection of diff utilitiesпакетом. Цей пакет можна знайти в Utilsрозділі в одному з декількох етапів установки Cygwin. встановлення Cygwin з дифузорами
  3. Додайте каталоги Cygwin до системної змінної PATH windows. Це можна зробити:
    а) додавши власну змінну CYGWIN, щоб зберегти замовлення. створення системної змінної CYGWIN;
    б) та додавання змінної, яку ви тільки що створили, до системної змінної PATH.додавання змінної CYGWIN до системної змінної PATH

Після цього ви можете зателефонувати ediff-buffers, ediff-filesі інші успішно. Що виглядає приблизно так:працює едіфф

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


3

Якщо у вас встановлено git для Windows, то цього достатньо додати

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

у ваш PATH, тому що він вже постачається з виконаним файлом diff і встановлює його в цій папці.


2

Це може заощадити людей деякий час, тому я відповім тут. Якщо ви не хочете додати binкаталог cygwin до свого шляху (або будь-якого іншого, запропонованого в інших відповідях), ви можете встановити шлях використання програмного едіффа шляхом встановлення змінної ediff-diff-program. Наприклад, ви можете встановити його C:\cygwin\bin(або будь-який фактичний шлях у вашому випадку), якщо використовуєте cygwin. Знадобилося трохи часу, щоб зрозуміти, яку змінну потрібно встановити. Деякі, які НЕ працювали, були: ediff-custom-diff-programі diff-command.

Наприклад:

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

робить це.


IIRC, ви не можете викликати бінарні файли cygwin за межами оболонки, оскільки вони не завантажують деякі бібліотеки. Я думаю, що це спрацює лише тоді, коли Emacs запускається від Cygwin, у якому повинна бути PATHправильно встановлена ​​змінна. Виправте мене, якщо я помиляюся.
DoMiNeLa10

1
@ DoMiNeLa10 Я протестував це на машині Windows 10 з Emacs 26.1, запустивши emacs з панелі завдань, не знаючи про Cygwin ... працює чудово. Крім того, рішення, додавши його до шляху, матиме те саме питання, яке ви описуєте, якби воно справді було проблемою.
sturman

1
Вибачте, остання частина мого коментаря невірна. Додавання його до шляху не матиме того самого питання, яке ви пропонуєте, оскільки воно зможе знайти бібліотеки. Однак, я перевірив підхід у відповіді, і він працює добре.
sturman

0

Якщо вам не потрібно створювати різницю, а просто хочете знайти відмінності між файлами, один із способів зробити це - використовувати M-x compare-windowsзамість цього.

Відкрийте два файли таким чином, що ви бачите їх обох одночасно, перемістіть точку до початку в обох буферах і запустіть M-x compare-windows. Він перемістить точку на перше місце, де файли відрізняються. Це має працювати без зовнішнього виконуваного файлу.


1
Це зупиняє крапку перед тим, як спочатку відрізнятись символом в обох файлах.
Empty_Mind

0

Якщо ви використовуєте інсталятор командного рядка https://scoop.sh/, ви можете отримати diffйого, ввівши scoop install diffutilsсвоє запит.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.