Porównywanie dwóch plików tekstowych w systemie Windows

11

Ponieważ ediff-filesi ediff-bufferspowodują apply: Searching for program: no such file or directory, diffbłąd na komputerach z systemem Windows.

Jak porównać dwa pliki za pomocą Emacsa w systemie Windows?

Pusty umysł
źródło
1
Instalując GetGnuWin32, masz dostęp do wielu programów GNU (diff, ale także wget, sed…). Jeśli zależy ci tylko na różnicach
fredtantini
Komunikat o błędzie mówi ci, co jest nie tak: Nie diffzainstalowałeś. Idź po Cygwina i spróbuj ponownie.
itsjeyd
@itsjeyd Cygwin jest już zainstalowany w systemie
Empty_Mind
@fredtantini Po zainstalowaniu GetGnuWin32 pojawia się ten sam błąd
Empty_Mind
2
Czy to jest na twojej ścieżce? Myślę, że katalog powinien przynajmniej znajdować się w exec-pathzmiennej.
fredtantini,

Odpowiedzi:

8

Jak powiedział @nanny w komentarzach, rozwiązaniem jest zainstalowanie Cygwin z diffutils. Oto jak to zrobić:

  1. Pobierz Cygwin ze strony głównej .
  2. Zainstaluj Cygwin z diffutils: A GNU collection of diff utilitiespakietem. Ten pakiet można znaleźć w Utilssekcji w jednym z kilku kroków instalacji Cygwin. instalowanie Cygwin z diffutils
  3. Dodaj katalogi Cygwin do zmiennej systemowej Windows PATH. Można to zrobić przez:
    a) dodanie własnej zmiennej CYGWIN, aby zachować porządek. tworzenie zmiennej systemowej CYGWIN;
    b) i dodanie właśnie utworzonej zmiennej do zmiennej systemowej PATH.dodanie zmiennej CYGWIN do zmiennej systemowej PATH

Po to jesteś w stanie zadzwonić ediff-buffers, ediff-filesa inni pomyślnie. Który wygląda mniej więcej tak:bieganie Ediff

Cieszyć się!

Pusty umysł
źródło
3

Jeśli masz zainstalowany git dla systemu Windows, wystarczy dodać

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

do ŚCIEŻKI, ponieważ jest już dostarczany z plikiem wykonywalnym diff i instaluje go w tym folderze.

Latający lis
źródło
2

Może to zaoszczędzić ludziom trochę czasu, więc odpowiem tutaj. Jeśli nie chcesz dodawać binkatalogu cygwin do swojej ścieżki (lub innych sugerowanych w innych odpowiedziach), możesz ustawić ścieżkę używaną przez program ediff, ustawiając zmienną ediff-diff-program. Na przykład możesz ustawić go na C:\cygwin\bin(lub jakąkolwiek rzeczywistą ścieżkę w twoim przypadku), jeśli używasz cygwin. Trochę czasu zajęło mi ustalenie, którą zmienną ustawić. Niektóre, które NIE zadziałały to: ediff-custom-diff-programi diff-command.

Na przykład:

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

czy to.

Sturgman
źródło
IIRC, nie można wywoływać plików binarnych cygwin poza powłoką, ponieważ nie ładują niektórych bibliotek. Myślę, że to zadziała tylko wtedy, gdy Emacs jest uruchamiany z Cygwin, który powinien mieć PATHpoprawnie ustawioną zmienną. Popraw mnie, jeśli się mylę.
DoMiNeLa10,
1
@ DoMiNeLa10 Przetestowałem to na komputerze z systemem Windows 10 z Emacsem 26.1, uruchamiając emacsa z paska zadań, nie wiedząc o Cygwin ... działa dobrze. Ponadto rozwiązanie dodające go do ścieżki miałoby ten sam problem, który opisujesz, gdyby był to naprawdę problem.
sturgman
1
Przepraszam, ostatnia część mojego komentarza jest nieprawidłowa. Dodanie go do ścieżki nie spowodowałoby tego samego problemu, który sugerujesz, ponieważ byłoby w stanie znaleźć biblioteki. To powiedziawszy, przetestowałem podejście w odpowiedzi i działa dobrze.
sturgman
0

Jeśli nie musisz tworzyć pliku różnicowego, a po prostu chcesz znaleźć różnice między plikami, jednym ze sposobów jest użycie M-x compare-windowszamiast tego.

Otwórz dwa pliki, aby zobaczyć oba jednocześnie, przesuń punkt na początek w obu buforach i uruchom M-x compare-windows. Przeniesie punkt do pierwszego miejsca, w którym pliki się różnią. Powinno to działać bez zewnętrznego pliku wykonywalnego.

legoscia
źródło
1
To zatrzymuje punkt przed pierwszym różniącym się znakiem w obu plikach.
Empty_Mind
0

Jeśli używasz instalatora wiersza polecenia https://scoop.sh/ , możesz uzyskać diffwpisując scoop install diffutilsswój monit.

Cesc
źródło