¿Qué comentario tiene la totalidad o parte de un Lisp-s exp usando Paredit?
Pregunta
Al editar código Lisp, en ocasiones es útil comentar totalmente fuera una definición de nivel superior, como esto:
;(defun some-fn-which-is-broken (x)
; ...)
... o comentario a cabo sólo una parte de una s-expresión, así:
(foo x
; y
z)
... y luego volver a compilar el archivo y prueba algo en el REPL, etc.
Con paredit en modo activado, esto no funciona. Esto es lo que sucede, si el punto es justo antes de los primeros paren a continuación:
(defun some-fn (x)
...)
y escribe un punto y coma, lo que se ingresa es un punto y coma y un salto de línea:
;
(defun some-fn (x)
...)
Lo mismo con comentando parte de la s-expresión:
(foo x
;
y
z)
Creo que si la definición es de una sola línea, funciona esto:
;(defparameter *foo* 10)
... pero por lo demás no puedo encontrar la manera de hacer esto. Paredit es grande, realmente me gustaría seguir utilizándolo. ¿Hay alguna Lispers que saben una forma de evitar esto, o emacs-magos que puede azotar encima de un poco de Emacs Lisp que se unen a algo así como paredit-comment-out-s-expr
?
Si hay un más lispy o Emacsy manera de lograr esencialmente la misma cosa, comentando las piezas de origen para volver a compilar, por favor, no dude en sugerir ellos!
Solución
Coloque el punto en el primer carácter de toda la sexp, marcar toda la sexp con C-M-espacio , y el tema H -; para hacer la comentando. Si es necesario hacerlo, su código fuente también se re-formateado para que sólo el sexp que ha marcado, y nada de lo que estaba también en la misma línea, se encuentra en un comentario.
muy fácilmente puede hacer un simple comando o incluso una macro para hacer esto:
(defun comment-sexp () "Comment out the sexp at point." (interactive) (save-excursion (mark-sexp) (paredit-comment-dwim)))
Otros consejos
Sólo una nota:
El #+
y lector #-
macros son bastante agradable para comentando sexps. Permiten haciendo caso omiso de la siguiente sexp, si el símbolo dado no es / se encuentra en *FEATURES*
. Sólo tiene que elegir un símbolo no en *FEATURES*
, y usarlo con #+
como esto:
#+nil
(defun foo ()
...)
Ahora, se tendrá en cuenta la definición de función (a menos NIL
está en *FEATURES*
, que no es muy probable).
Como medida provisional, puede utilizar C-q (quoted-insert
) para insertar un carácter arbitrario sin provocar ningún tipo de magia modo relacionada. Por ejemplo, en java-mode, escribir paréntesis resangra la línea actual, que no siempre es lo que quiero; en tales casos, voy a insertar un paréntesis con C-q para preservar mi hendidura. (O más a menudo, te escribo un paréntesis, observar el cambio de sangría, maldición, deshacer y volver a entrar con C-q .)
Para comentar, en general, probablemente sería más fácil de usar H -;. (comment-dwim
) en lugar de escribir manualmente los puntos y comas
Puede utilizar C-M-SPC M-;
para marcar el S-expresión (C-M-SPC
para mark-sexp
) y luego comentarlo (M-;
para comment-dwim
).
En paredit 23, simplemente escribiendo ;
no se introduzca nada que no tenga que fuera de la línea. Por lo que va a hacer lo correcto para su segundo ejemplo. Y si quisiera comentar z
en lugar de y
empujaría sólo el delimitador de cierre a otra línea.