在编辑LISP代码时,偶尔会完全评论顶级定义很有用,例如:

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

...或仅评论S表达的一部分,这样:

(foo x
;    y
     z)

...然后重新编译文件,并在替补中测试某些内容,等等。

启用了Paredit模式,这无效。这就是发生的情况,如果要点在下面的第一个帕伦之前:

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

然后您键入一个半隆,输入的是半隆和新线:

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

与评论部分表达相同:

(foo x
;    
     y
     z)

我认为,如果定义全部在一行中,这有效:

;(defparameter *foo* 10)

...但是否则我找不到如何做到这一点。 Paredit很棒,我真的很想继续使用它。是否有任何知道这一点的方法,或者有emacs-wizards可以鞭打一些emacs lisp以绑定到类似的东西 paredit-comment-out-s-expr?

如果有一种更加笨拙或更雄厚的方法可以实现同一件事,请评论部分重新编译的来源,请不要犹豫!

有帮助吗?

解决方案

将重点定位在整个SEXP的第一个字符上,用 CM空间, 和问题 m-; 进行评论。如果有必要这样做,您的源代码也将重新编辑,以便只有您标记的SEXP(也没有在同一条行上)的SEXP在评论中。

您可以很容易地制作一个简单的命令甚至宏来做到这一点:

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

其他提示

只是一个旁注:

#+#- 读者宏非常适合评论性爱。他们允许忽略以下SEXP,如果给定的符号未找到/ *FEATURES*. 。只选择一个符号不在 *FEATURES*, ,并与 #+ 像这样:

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

现在,函数定义将被忽略(除非 NIL*FEATURES*, ,这不太可能)。

作为定格措施,您可以使用 CQ (quoted-insert)插入任意角色而不触发任何与模式相关的魔法。例如,在Java模式中,键入括号重新指出了当前行,这并不总是我想要的。在这种情况下,我将与 CQ 保留我的凹痕。 (或更频繁地,我将键入括号,观察缩进的变化,诅咒,撤消和重新输入 CQ.)

对于一般的评论,可能会更容易使用 m-; (comment-dwim),而不是手动键入分号。

您可以使用 C-M-SPC M-; 标记s表达(C-M-SPC 为了 mark-sexp)然后评论(M-; 为了 comment-dwim).

在Paredit 23中,仅打字 ; 不会推动任何不必关闭的东西。因此,它将为您的第二个示例做正确的事情。如果您想发表评论 z 代替 y 它只会将关闭定界符推向另一行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top