Question

Lors de l'édition du code Lisp, parfois il est utile de commenter entièrement une définition de niveau supérieur, comme ceci:

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

... ou un commentaire sur une partie seulement d'une s-expression, comme ceci:

(foo x
;    y
     z)

... et puis recompilation quelque chose de fichier et test dans le REPL, etc.

Avec le mode paredit-activé, cela ne fonctionne pas. Voici ce qui se passe, si le point est juste avant la première paren ci-dessous:

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

et que vous tapez un point-virgule, ce qui est entré est un point-virgule et un saut de ligne:

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

Même avec en commentant une partie de la s-expression:

(foo x
;    
     y
     z)

Je pense que si la définition est sur une seule ligne, cela fonctionne:

;(defparameter *foo* 10)

... mais je ne peux pas autrement savoir comment faire cela. Paredit est grande, je voudrais vraiment continuer à l'utiliser. Y at-il Lispers qui savent un moyen de contourner cela, ou Emacs-sorciers qui peuvent concocter un peu de Emacs Lisp pour se lier à quelque chose comme paredit-comment-out-s-expr?

S'il y a une façon plus ou Lispy Emacsy d'accomplir essentiellement la même chose, en commentant des parties de source recompilation, s'il vous plaît, ne hésitez pas à les suggérer!

Était-ce utile?

La solution

Placez le point sur le premier caractère de l'ensemble sexp, marque l'ensemble sexp avec C-M-espace et numéro M -; pour faire le commentaire. S'il est nécessaire de le faire, votre code source sera également reformaté pour que seul le sexp que vous avez marqué, et rien qui était aussi sur la même ligne, est dans un commentaire.

Vous pouvez très facilement faire une simple commande ou même une macro pour le faire:

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

Autres conseils

Juste une remarque:

Les macros lecteur #+ et de #- sont assez bien pour en commentaire sexps. Ils permettent d'ignorer la sexp suivante, si le symbole donné est pas / se trouve dans *FEATURES*. Il suffit de choisir un symbole pas *FEATURES*, et l'utiliser avec #+ comme ceci:

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

Maintenant, la définition de la fonction sera ignorée (sauf si NIL est *FEATURES*, ce qui est peu probable).

En tant que solution provisoire, vous pouvez utiliser C-q (quoted-insert) pour insérer un caractère arbitraire sans déclencher une magie liée mode. Par exemple, en mode java, en tapant entre parenthèses réindentera la ligne courante, ce qui est pas toujours ce que je veux; dans ce cas, je vais insérer une parenthèse avec C-q pour préserver mon empreinte. (Ou plus souvent, je vais taper une parenthèse, observer le changement d'indentation, malédiction, undo et re-entrer avec C-q .)

Pour des commentaires en général, il serait probablement plus facile à utiliser M -;. (comment-dwim) plutôt que de taper manuellement les points-virgules

Vous pouvez utiliser C-M-SPC M-; pour marquer le S-expression (C-M-SPC pour mark-sexp), puis la commenter (M-; pour comment-dwim).

Dans paredit 23, juste en tapant ; ne poussera pas tout ce qu'il n'a pas à la ligne. Donc, il va faire la bonne chose pour votre deuxième exemple. Et si vous voulez commenter z au lieu de y il pousserait seulement le délimiteur de fermeture à une autre ligne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top