Antworten:
Symbole für Funktionen und Makros haben eine lisp-indent-function
Eigenschaft, die Sie mit declare
oder in Ihrem Fall festlegen können , da sie if
bereits definiert ist, können Sie sie einfach verwenden put
.
Über die möglichen Eigenschaftswerte können Sie hier lesen:
M-: (info "(elisp) Indenting Macros")
return
if
Die Standardeinstellung ist, 2
was bedeutet, dass die zweite Form eine Sonderbehandlung erhält und versetzt ist.
Sie können den Eigenschaftswert in ändern, 'defun
und alle Körperformen werden ausgerichtet.
(put 'if 'lisp-indent-function 'defun)
Beste Übung:
Es ist wichtig zu beachten, dass es einen Grund für den Einrückungsstil gibt. if
in Elisp ist NICHT wie if
in Common Lisp.
Beachten Sie die verschiedenen Signaturen:
Common Lisp: (if TEST THEN &OPTIONAL ELSE)
Emacs Lisp: (if COND THEN ELSE...)
In Emacs lisp können Sie nach der Bedingung so viele Formulare haben, wie Sie möchten, aber nur das erste Formular ist die THEN-Klausel. Alle anderen Formulare sind Teil der ELSE-Klausel.
Dies ist ein gültiges Elisp- if
Formular, das in CL nicht gültig ist:
(if something
(message "THEN")
(message "all")
(message "these")
(message "run")
(message "on")
(message "ELSE"))
Dies zeigt, warum es wichtig ist, dass die THEN-Klausel stärker eingerückt wird, um sie von allen anderen Formen abzuheben.
Zusätzlich zu dem Einzug, der für die Fähigkeit des Benutzers wichtig ist, den Code zu analysieren, würde er auch gegen die akzeptierten Stilmuster von elisp verstoßen. 99,99999% (sorgfältig berechnet) des Elisp-Codes, auf den Sie stoßen, verwenden genau das gleiche Standard-Einrückungsschema. Wenn Sie die Einrückung if
für Ihren eigenen Gebrauch ändern, wird es für Sie schwierig, an anderen Elisp zu arbeiten, und für andere wird es schwierig, an Ihrem zu arbeiten.
if
wie von korrigierenlisp-indent-function
.