So sánh hai tệp văn bản trên hệ thống Windows


11

ediff-filesediff-bufferskết quả là apply: Searching for program: no such file or directory, difflỗi trên máy windows.

Làm cách nào để so sánh hai tệp bằng Emacs trên hệ thống windows?


1
Bằng cách cài đặt GetGnuWin32, bạn có quyền truy cập vào rất nhiều phần mềm gnu (diff nhưng alos wget, sed che). Nếu bạn chỉ quan tâm đến diff, bạn có thể đi với gnu.org/software/diffutils
fredtantini

Thông báo lỗi cho bạn biết những gì sai: Bạn chưa diffcài đặt. Đi lấy Cygwin và thử lại.
itjeyd

@itsjeyd Cygwin đã được cài đặt trên hệ thống
Empty_Mind

@fredtantini Sau khi cài đặt GetGnuWin32, tôi cũng gặp lỗi tương tự
Empty_Mind

2
Có phải trong con đường của bạn? Tôi nghĩ rằng thư mục ít nhất nên có trên exec-pathbiến.
fredtantini

Câu trả lời:


8

Như @nanny đã nói trong các bình luận, giải pháp đã cài đặt Cygwin với diffutils. Đây là cách làm:

  1. Tải về Cygwin từ trang chủ của nó .
  2. Cài đặt Cygwin với diffutils: A GNU collection of diff utilitiesgói. Gói này có thể được tìm thấy trong Utilsphần trong một vài bước cài đặt Cygwin. cài đặt Cygwin với diffutils
  3. Thêm các thư mục Cygwin vào biến hệ thống cửa sổ PATH. Điều này có thể được thực hiện bằng cách:
    a) thêm biến CYGWIN của riêng bạn, để giữ trật tự. tạo biến hệ thống CYGWIN;
    b) và thêm biến bạn vừa tạo vào biến PATH của hệ thống.thêm biến CYGWIN vào biến hệ thống PATH

Sau này, bạn có thể gọi ediff-buffers, ediff-filesvà những người khác thành công. Trông giống như thế này:chạy ediff

Thưởng thức!


3

Nếu bạn đã cài đặt git cho windows, thì nó là đủ để thêm

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

vào PATH của bạn, bởi vì nó đã xuất xưởng với một tệp thực thi khác và cài đặt nó trong thư mục đó.


2

Điều này có thể giúp mọi người tiết kiệm thời gian vì vậy tôi sẽ trả lời ở đây. Nếu bạn không muốn thêm binthư mục cygwin vào đường dẫn của mình (hoặc bất kỳ thư mục nào khác được đề xuất trong các câu trả lời khác), bạn có thể đặt đường dẫn của chương trình ediff sử dụng bằng cách đặt biến ediff-diff-program. Ví dụ: bạn có thể đặt nó thành C:\cygwin\bin(hoặc bất cứ đường dẫn thực tế nào trong trường hợp của bạn) nếu sử dụng cygwin. Tôi phải mất một thời gian để tìm ra biến nào cần thiết lập. Một số DID KHÔNG hoạt động là: ediff-custom-diff-programdiff-command.

Ví dụ:

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

Phải không.


IIRC, bạn không thể gọi các nhị phân cygwin bên ngoài shell, vì chúng không tải được một số thư viện. Tôi nghĩ rằng điều này sẽ chỉ hoạt động khi Emacs được chạy từ Cygwin, cần PATHđặt biến chính xác. Sửa tôi nếu tôi sai.
DoMiNeLa10

1
@ DoMiNeLa10 Tôi đã thử nghiệm nó trên máy Windows 10 với Emacs 26.1 bằng cách khởi động emacs từ thanh tác vụ mà không biết về Cygwin ... hoạt động tốt. Ngoài ra, giải pháp thêm nó vào đường dẫn sẽ có cùng một vấn đề mà bạn mô tả nếu nó thực sự là một vấn đề.
sturgman

1
Tôi xin lỗi, phần cuối cùng của nhận xét của tôi là không chính xác. Thêm nó vào đường dẫn sẽ không có cùng một vấn đề mà bạn đề xuất, vì nó sẽ có thể tìm thấy các thư viện. Điều đó nói rằng, tôi đã thử nghiệm cách tiếp cận trong câu trả lời và nó hoạt động tốt.
sturgman

0

Nếu bạn không cần phải tạo khác biệt, nhưng chỉ muốn tìm sự khác biệt giữa các tệp, một cách để làm điều đó là sử dụng M-x compare-windowsthay thế.

Mở hai tệp sao cho bạn thấy cả hai cùng một lúc, di chuyển điểm đến điểm bắt đầu trong cả hai bộ đệm và chạy M-x compare-windows. Nó sẽ di chuyển điểm đến vị trí đầu tiên nơi các tệp khác nhau. Điều này sẽ làm việc mà không có bất kỳ thực thi bên ngoài.


1
Điều này dừng điểm trước khi ký tự khác nhau đầu tiên trong cả hai tệp.
Empty_Mind

0

Nếu bạn sử dụng trình cài đặt dòng lệnh https://scoop.sh/, bạn có thể nhận được diffbằng cách nhập scoop install diffutilslời nhắc của mình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.