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!

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top