Domanda

Quando si modifica il codice Lisp, di tanto in tanto è utile per commentare interamente in una definizione di livello superiore, in questo modo:

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

... o commentare solo una parte di una s-espressione, in questo modo:

(foo x
;    y
     z)

... e poi ricompilare il file e prova qualcosa nel REPL, ecc.

Con paredit-mode abilitato, questo non funziona. Ecco cosa succede, se il punto è giusto prima che i primi parentesi di seguito:

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

e si digita un punto e virgola, ciò che viene inserito un punto e virgola e un ritorno a capo:

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

Lo stesso con commentando parte della s-espressione:

(foo x
;    
     y
     z)

Credo che se la definizione è tutto su una riga, questo funziona:

;(defparameter *foo* 10)

... ma per il resto non riesco a trovare il modo di fare questo. Paredit è grande, mi piace molto di continuare a utilizzarlo. Ci sono dei Lispers che conoscono un modo per aggirare questo, o Emacs-maghi che può improvvisare un po 'di Emacs Lisp di legarsi a qualcosa come paredit-comment-out-s-expr?

Se c'è un altro Lispy o Emacsy modo di realizzare essenzialmente la stessa cosa, commentando le parti di origine per ricompilazione, per favore, non esitate a suggerire loro!

È stato utile?

Soluzione

Posizionare il punto sul primo carattere di tutta la sexp, segnano l'intero sexp con C-M-spazio e di rilascio M -; per fare il commento. Se è necessario farlo, il codice sorgente sarà anche ri-formattato in modo che solo il sexp contrassegnato, e nulla di ciò che è stato anche sulla stessa linea, è in un commento.

Si può facilmente fare un semplice comando o anche una macro per fare questo:

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

Altri suggerimenti

Solo una nota a margine:

Il #+ e lettore #- macro sono abbastanza piacevole per commentare sexps. Essi permettono di mancato rispetto delle seguenti sexp, se il simbolo raffigurato non è / è trovato in *FEATURES*. Basta scegliere un simbolo non in *FEATURES*, e utilizzarlo con #+ in questo modo:

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

Ora, la definizione della funzione sarà ignorata (a meno che non sia in NIL *FEATURES*, che non è molto probabile).

Come rimedio provvisorio, è possibile utilizzare C-q (quoted-insert) per inserire un carattere arbitrario senza attivare nessuna magia modalità relative. Ad esempio, in java-mode, digitando parentesi reindents la linea attuale, che non è sempre quello che voglio; in questi casi, io inserisco una parentesi con C-q per preservare il mio rientro. (O più spesso, io digito una parentesi, osservare il cambiamento indentazione, maledizione, undo, e rientrare con C-q .)

Per commentare in generale, sarebbe probabilmente più facile da usare M -;. (comment-dwim), invece di digitare manualmente i punti e virgola

È possibile utilizzare C-M-SPC M-; per segnare la S-espressione (C-M-SPC per mark-sexp) e poi commentarlo (M-; per comment-dwim).

In paredit 23, semplicemente digitando ; non spingerà ogni cosa che non ha bisogno di fuori dalla linea. Così sarà fare la cosa giusta per il tuo secondo esempio. E se si voleva commentare z invece di y sarebbe solo spingere il delimitatore di chiusura a un'altra linea.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top