Ich bin mir ziemlich sicher, dass es andere Lösungen gibt, aber Sie können dies --eval
anstelle von -f
( --funcall
) tun :
emacs --eval '(ediff-files "file1" "file2")'
In der Tat, die Emacs - Handbuch auf „Befehlszeilenargumente für Emacs Invocation“ sagt , dass -f function
und--funcall function
Rufen Sie die Lisp- Funktion auf . Wenn es sich um eine interaktive Funktion (einen Befehl) handelt, werden die Argumente interaktiv gelesen, als hätten Sie dieselbe Funktion mit einer Tastenfolge aufgerufen. Andernfalls wird die Funktion ohne Argumente aufgerufen.
Dies erklärt, warum Sie mit -f
/ nicht das gewünschte Verhalten erzielen können --funcall
.
ediff-directories
nimmt drei Argumente an, daher ändert sich der oben gezeigte Befehl in
emacs --eval '(ediff-directories "dir1" "dir2" "regexp")'
Wie hier erläutert , ediff-directories
wird Emacs eingegeben ediff-meta-mode
, sodass Sie zuerst im "Ediff Session Group Panel" angezeigt werden. Aus dem Ediff-Handbuch zu Sitzungsgruppen :
Mehrere wichtige Einträge von Ediff führen Vergleiche und Zusammenführungen in Verzeichnissen durch. Bei der Eingabe ediff-directories
wird ediff-directories3
[...] dem Benutzer ein Dired-ähnlicher Puffer angezeigt, in dem die für die beteiligten Verzeichnisse gemeinsamen Dateien zusammen mit ihrer Größe aufgelistet sind. [...] Wir nennen diesen Puffer Sitzungsgruppenbereich, da alle Ediff-Sitzungen, die den aufgelisteten Dateien zugeordnet sind, diesen Puffer als gemeinsamen Schwerpunkt haben. [...]
Beim Verzeichnisvergleich oder beim Zusammenführen werden in einem Sitzungsgruppenfenster nur die Dateien angezeigt, die allen beteiligten Verzeichnissen gemeinsam sind. Die Unterschiede werden in einem separaten Verzeichnisdifferenzpuffer gespeichert und bequem durch Eingabe Din das entsprechende Sitzungsgruppenfenster angezeigt . [...]
Um den tatsächlichen Unterschied anzuzeigen, drücken Sie einfach D( ediff-show-dir-diffs
).
emacs --eval '(ediff-directories "dir1" "dir2" "regexp")'
funktioniert gut.D
(ediff-show-dir-diffs
) drücken .*** No differences ***
obwohl ich ediff aus emacs mit Mx aufrufe, funktioniert alles wie erwartet (dh die Unterschiede werden angezeigt). Vielleicht habe ich etwas anderes in meinen .emacs eingestellt.Ich verwende das folgende Skript: Es prüft im Voraus, ob es Unterschiede gibt, und öffnet Emacs mit der entsprechenden ausgewerteten Funktion. Bei dieser
-d
Option wird davon ausgegangen, dass die bereitgestellten Elemente Verzeichnisse sind undediff-directories
stattdessenediff-files
verwendet werden. Andernfalls wird überprüft, ob es sich um Verzeichnisse oder Dateien handelt, und die entsprechende Funktion wird festgelegt.Da es im Voraus prüft, ob es Unterschiede gibt, finde ich es sehr praktisch, wenn ich viele Dateien in verschiedenen Ordnern über die Befehlszeile vergleiche, anstatt eine einzelne Diff-Sitzung in den übergeordneten Ordnern auszuführen. Zum Beispiel zum Vergleichen der Ordner A und B und zum Kopieren nicht vorhandener Dateien von der ersten in die andere ...
quelle