您如何使用Paredit评论LISP S-EXP的全部或一部分?
题
在编辑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
它只会将关闭定界符推向另一行。