Jeder Befehl ist eine Funktion, aber nicht jede Funktion ist auch ein Befehl. 1
Ein Befehl beinhaltet einen Aufruf von interactive
; Aus diesem Grund werden Befehle üblicherweise als "interaktive Funktionen" bezeichnet. Befehle können über aufgerufen M-x name-of-command
RETund an eine Tastenfolge gebunden werden. Normale Funktionen enthalten keinen Aufruf von interactive
, können nicht mit aufgerufen werden M-xund Sie können sie nicht an eine Tastenfolge binden. Um eine Funktion auszuführen, die nicht interaktiv ist, können Sie M-:( eval-expression
) drücken , den Namen der Funktion gefolgt von Werten für Argumente in Klammern eingeben und Folgendes drücken RET:
M-: (name-of-function arg1 arg2 arg3)
RET
Wenn die Funktion nicht mit dem aktuellen Puffer arbeiten soll, können Sie auch eingeben
(name-of-function arg1 arg2 arg3)
*scratch*
Klicken Sie in den Puffer und drücken Sie C-x C-e( eval-last-sexp
) mit dem Punkt nach der schließenden Klammer.
Um eine Funktion bar
als Befehl verfügbar zu machen , können Sie sie foo
wie folgt in eine benutzerdefinierte interaktive Funktion ( ) einbinden:
(defun foo ()
(interactive)
(bar))
Wenn Sie bar
ein oder mehrere Argumente verwenden, müssen Sie diese natürlich angeben, damit foo
die Funktion ordnungsgemäß ausgeführt wird.
Wenn Sie austauschbar Menschen mit Hilfe der Begriffe „Funktion“ und „Befehl“ zu sehen, dies könnte angeben (je nach Kontext) , dass sie nicht über die Unterschiede zwischen den zugrundeliegenden Konzepte sind.
1 Beachten Sie, dass ich hier über defun
s spreche . Wie @Stefan in den Kommentaren ausführt, sind Tastaturmakros ein Sonderfall: Sie können als Befehle betrachtet werden , sind aber keine Funktionen.
C-h i
, wählen Sie das Elisp-Handbuch ,i command
- bringt Sie direkt in den KnotenWhat is a function?
, was all dies kristallklar macht. Helfen Sie Benutzern, Emacs zu fragen. (Nur eine Meinung.)