Angenommen, ich habe einen Elisp-Code wie:
(+ 2 3▮(+ 3
4))
Gibt es eine Möglichkeit, das Geschlecht nach dem Cursor automatisch neu einzurücken, wenn ich Symbole hinzufüge oder entferne?
Nach dem Drücken von SPC 4 SPC
würde ich also automatisch Folgendes erhalten:
(+ 2 3 4 ▮(+ 3
4))
Ich kann dieses Handbuch ausführen, mark-sexp
indem ich gefolgt von anrufe indent-region
. Gibt es dafür bessere Möglichkeiten?
elisp
indentation
Maciej Goszczycki
quelle
quelle
electric-indent-mode
ist viel besser als die Zuordnung<return>
zunewline-and-indent
Antworten:
Anstelle von
mark-sexp
+indent-region
können Sie auch drückenC-M-q
. Dies wird anrufenindent-pp-sexp
. Nicht automatisch, aber ein bisschen besser, als zwei Befehle aufrufen zu müssen.Oder
paredit-mode
drücken Sie, wenn Sie verwendenM-q
. Dadurch wird die gesamte Funktionsdefinition, in der Sie sich befinden, erneut berücksichtigt.quelle
(add-hook 'post-self-insert-hook 'indent-pp-sexp)
funktioniert überraschend gut.M-x sp-indent-defun
. Ich binde das anC-M-q
.Modus für aggressive Einrückung
Da einige Leute danach fragten, habe ich diese Antwort in ein Paket umgewandelt .
Wenn Sie Melpa konfiguriert haben, können Sie es mit installieren
In der Readme-Datei finden Sie alle Optionen. Die einfachste Methode zum Aktivieren ist jedoch:
Die alte Antwort
Im Folgenden wird die automatische Einrückung nur für Elisp-Puffer ausgeführt. Es hat den Vorteil, dass es auch funktioniert, wenn Sie etwas löschen oder ruckeln (anstatt nur zu tippen). Es ist auch einfach, andere Modi hinzuzufügen.
Diese Funktion rückt jeden S-Ausdruck ein, in dem sich der Punkt gerade befindet. Sie können es an einen Schlüssel binden, wenn Sie möchten, aber sehen Sie zuerst weiter unten.
Dieser Haken bewirkt, dass diese Funktion ausgeführt wird, nachdem Sie etwas eingegeben haben, jedoch nur in Elisp-Puffern. Dies sollte alles immer eingerückt halten.
Versuch es! Es funktioniert bemerkenswert gut.
Wenn Sie dem Vorschlag von @ holocronweaver in den Kommentaren folgen, können Sie für c-ähnliche Sprachen Folgendes verwenden:
quelle
Ich kenne keine bereits vorhandene Lösung, aber Sie können diese verwenden
post-self-insert-hook
, um dies selbst zu erreichen:Ich würde mir allerdings Sorgen um mögliche Leistungsprobleme machen.
quelle
Sie können den el-fly-indent-Modus ausprobieren , der sich besser
aggressive-indent-mode
verhält als bei Elisp.quelle