Befehl zum Formatieren (Verschönern) von Elisp-Code

21

Angenommen, ich habe eine Funktion, die wie folgt aussieht (wie es häufig beim Drucken von Elisp-Ausgaben der Fall ist).

(defun my-example-function () (let ((a (do-something)) (b (do-something))) (setq someone me) (with-current-buffer b (do-that (or this (and that those))) (format "%s" a))))

Ich hätte gerne einen Befehl, der das in etwas verwandelt, was ein Mensch schreiben würde, wie zum Beispiel den folgenden.

(defun my-example-function ()
  (let ((a (do-something))
        (b (do-something)))
    (setq someone me)
    (with-current-buffer b
      (do-that (or this (and that those)))
      (format "%s" a))))

Ich verstehe, dass es mehr als eine Möglichkeit gibt, einen Teil des Elisp-Codes zu formatieren , und verschiedene Menschen machen es unterschiedlich. Darüber hinaus verstehe ich, dass es etwas subjektiv ist. Es sollte jedoch ziemlich einfach sein, Regeln zu entwickeln, die zu mindestens anständigem Code führen.

Eigentlich habe ich vor einiger Zeit darüber nachgedacht, aber ich dachte, es ist besser zu fragen, bevor ich das Rad neu erfinde.

Beachten Sie, dass mir die pp- Funktion bekannt ist, sie jedoch nicht so gut funktioniert:

(defun my-example-function nil
  (let
      ((a
        (do-something))
       (b
        (do-something)))
    (setq someone me)
    (with-current-buffer b
      (do-that
       (or this
           (and that those)))
      (format "%s" a))))
Malabarba
quelle
4
Hilft das? Elisp Formatierung
Luke
Die Formatierung ist unbedingt subjektiv. Ich bin mir nicht sicher, ob Sie es besser machen könnten als eine etwas bessere Version von pp.
Shosti
@King Danke, es ist sicherlich relevant.
Malabarba

Antworten:

10

So formatiert es lispy für mich neu (durch Drücken Mauf eines der beiden Enden des Ausdrucks):

(defun my-example-function ()
  (let ((a (do-something))
        (b (do-something)))
    (setq someone me)
    (with-current-buffer b (do-that (or this (and that those)))
                         (format "%s" a))))

Um zur angegebenen Formatierung zu gelangen, drücken Sie qk C-m [.

abo-abo
quelle
(local-set-key (kbd "s-8") #'lispy-multiline) (local-set-key (kbd "s-*") #'lispy-oneline)
Grettke
8

Wie andere in Kommentaren vorgeschlagen haben, kann "Formatieren" verschiedene Bedeutungen haben.

Versuchen Sie für Einrückungen , die ziemlich konventionell sind, C-M-q(Befehl indent-pp-sexpin Lisp-Modi) mit dem Cursor irgendwo innerhalb des Top-Level-Sexp zu verwenden, den Sie neu einrücken möchten (z defun. B. das Sexp).

Nein, dies ist keine "automatische" Einrückung, aber es kann zur Gewohnheit werden, sie zu verwenden. ;-)

Für andere Dinge als Einrückungen müssen Sie entweder manuell vorgehen oder Ihre eigenen "Formatierungs" -Befehle rollen oder vorhandene finden.

Siehe auch das Emacs-Handbuch, Knoten Mehrzeiliger Einzug und das Elisp-Handbuch, Knoten Mode-Specific Indent.

Drew
quelle
3
Danke, ich bin ziemlich zufrieden mit der Einrückung, ich suche etwas, das weiß, wann man Zeilen umbricht. :-) Und ja ich verstehe es ist subjektiv. :-(
Malabarba
M-q( fill-paragraph) kann manchmal nützlich sein, um im Emacs-Lisp-Modus Zeilenumbrüche vorzunehmen, je nach Kontext. Aber Sie suchen wahrscheinlich auch nach Ausrichtung ...
Drew