Frage

Wenn Lisp-Code bearbeiten, gelegentlich nützlich es ist ganz auf eine Top-Level-Definition auf Kommentar, wie folgt aus:

;(defun some-fn-which-is-broken (x)
;  ...)

... oder Kommentar aus nur einen Teil eines s-Ausdruck, wie folgt aus:

(foo x
;    y
     z)

... und dann neu zu kompilieren die Datei und testen Sie etwas in der REPL, etc.

Mit paredit-Modus aktiviert ist, das funktioniert nicht. Hier ist, was passiert, wenn der Punkt direkt vor den ersten paren unten:

(defun some-fn (x)
  ...)

und Sie ein Semikolon, was eingegeben wird, ist ein Semikolon und ein Newline:

;
(defun some-fn (x)
  ...)

Same mit Auskommen Teil des s-Ausdruck:

(foo x
;    
     y
     z)

Ich denke, dass, wenn die Definition ist alles auf einer Linie, das funktioniert:

;(defparameter *foo* 10)

... aber sonst kann ich nicht herausfinden, wie dies zu tun. Paredit ist groß, ich würde wirklich gerne behalten Sie es. Gibt es Lispers, die einen Weg, um dieses wissen, oder Emacs-Assistenten, die ein bisschen von Emacs Lisp zu binden an so etwas wie paredit-comment-out-s-expr Peitsche kann?

Wenn es eine Lispy oder Emacsy ist Art und Weise im wesentlichen die gleiche Sache zu bewerkstelligen, Auskommen Teile Quelle recompile, bitte, zögern Sie nicht, sie vorschlagen!

War es hilfreich?

Lösung

Position der Punkt auf dem ersten Zeichen des ganzen sexp, markieren Sie die ganze sexp mit C-M-Raum und Ausgabe M -; , um die Kommentierung zu tun. Wenn es notwendig ist, dies zu tun, wird Ihr Quellcode auch neuformatierte so sein, dass nur die sexp Sie markiert, und nichts, was auch auf der gleichen Linie war, ist in einem Kommentar.

Sie können ganz einfach einen einfachen Befehl oder sogar einen Makro, das zu tun:

(defun comment-sexp ()
  "Comment out the sexp at point."
  (interactive)
  (save-excursion
    (mark-sexp)
    (paredit-comment-dwim)))

Andere Tipps

Nur eine Randnotiz:

Die #+ und #- Leser Makros sind ziemlich nett für sexps Kommentierung aus. Sie ermöglichen ignorieren die folgenden sexp, ob das angegebene Symbol ist nicht / in *FEATURES* gefunden. Wählen Sie einfach ein Symbol nicht in *FEATURES*, und verwenden Sie es mit #+ wie folgt aus:

#+nil
(defun foo ()
  ...)

Nun wird die Funktionsdefinition ignoriert werden (es sei denn NIL in *FEATURES* ist, was nicht sehr wahrscheinlich ist).

Als Notlösung, können Sie C-q (quoted-insert) ohne ein beliebiges Zeichen einzufügen jede Modus bezogene Magie auslösen. Zum Beispiel in Java-Modus, Klammern eingeben reindents die aktuelle Zeile, die nicht immer ist das, was ich will; in einem solchen Fall werde ich eine Klammer mit C-q einfügen, um meine Einzug zu erhalten. (Oder häufiger, werde ich eine Klammer ein, beobachten die Vertiefung ändern, fluch, Undo und neu eingeben mit C-q ).

im Allgemeinen zu kommentieren, wäre es wahrscheinlich einfacher zu bedienen M -;. (comment-dwim), anstatt die Semikolons manuell eingeben

Sie können C-M-SPC M-; verwenden, um die S-Ausdruck (C-M-SPC für mark-sexp) zu markieren und dann kommentieren sie (M-; für comment-dwim).

In paredit 23, nur die Eingabe ; wird nichts schieben Sie es nicht über die Linie ab. So wird es das Richtige für Ihr zweites Beispiel tun. Und wenn Sie statt z auszukommen y wollte er nur den Endbegrenzer auf eine andere Linie drücken würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top