Tôi khá chắc chắn có các giải pháp khác, nhưng bạn có thể thực hiện việc này bằng cách sử dụng --eval
thay vì -f
( --funcall
):
emacs --eval '(ediff-files "file1" "file2")'
Trên thực tế, hướng dẫn sử dụng Emacs về "Đối số dòng lệnh cho việc gọi Emacs" nói rằng -f function
và--funcall function
Gọi Lisp chức năng chức năng . Nếu nó là một hàm tương tác (một lệnh), nó sẽ đọc các đối số tương tác giống như bạn đã gọi hàm tương tự với một chuỗi khóa. Mặt khác, nó gọi hàm không có đối số.
Điều này giải thích tại sao bạn không thể có được hành vi bạn muốn với -f
/ --funcall
.
ediff-directories
nhận ba đối số, vì vậy lệnh hiển thị ở trên thay đổi thành
emacs --eval '(ediff-directories "dir1" "dir2" "regexp")'
Như đã giải thích ở đây , ediff-directories
khiến Emacs xâm nhập ediff-meta-mode
, vì vậy trước tiên bạn sẽ được đưa vào "Bảng điều khiển nhóm phiên Ediff". Từ hướng dẫn Ediff về Nhóm phiên :
Một số mục chính của Ediff thực hiện so sánh và hợp nhất trên các thư mục. Khi nhập ediff-directories
, ediff-directories3
[...] người dùng được cung cấp bộ đệm giống như Dired liệt kê các tệp chung cho các thư mục liên quan cùng với kích thước của chúng. [...] Chúng tôi gọi bộ đệm này là Bảng nhóm vì tất cả các phiên Ediff được liên kết với các tệp được liệt kê sẽ có bộ đệm này làm đầu mối chung. [...]
Trong so sánh hoặc hợp nhất thư mục, bảng nhóm phiên chỉ hiển thị các tệp chung cho tất cả các thư mục liên quan. Sự khác biệt được giữ trong một bộ đệm khác biệt thư mục riêng biệt và được hiển thị thuận tiện bằng cách nhập Dvào bảng nhóm phiên tương ứng. [...]
Vì vậy, để hiển thị khác biệt thực tế, chỉ cần nhấn D( ediff-show-dir-diffs
).