emacs - 您如何使用 Paredit 注释掉全部或部分 Lisp s-exp?

标签 emacs lisp paredit

在编辑 Lisp 代码时,有时完全注释掉顶级定义是有用的,如下所示:

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

... 或仅注释掉 s 表达式的一部分,如下所示:

(foo x
;    y
     z)

...然后重新编译文件并在 REPL 中测试一些东西,等等。

启用 paredit-mode 后,这不起作用。如果该点正好在下面的第一个括号之前,则会发生以下情况:

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

然后你输入一个分号,输入的是一个分号和一个换行符:

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

与注释掉部分 s 表达式相同:

(foo x
;    
     y
     z)

我认为如果定义全部在一行中,则这样可行:

;(defparameter *foo* 10)

...但除此之外我不知道该怎么做。 Paredit 很棒,我真的很想继续使用它。是否有任何 Lispers 知道解决这个问题的方法,或者 Emacs 向导可以创建一些 Emacs Lisp 来绑定(bind)到 paredit-comment-out-s-expr 之类的东西?

如果有更多的 Lispy 或 Emacsy 方法来完成基本相同的事情,请注释掉部分源代码以重新编译,请不要犹豫,提出建议!

最佳答案

将点定位在整个sexp的第一个字符上,用C-M-space标记整个sexp,然后发出M-;进行注释。如果有必要这样做,您的源代码也将被重新格式化,以便只有您标记的 sexp,而不是同一行上的任何内容,都在注释中。

您可以非常轻松地制作一个简单的命令甚至一个宏来执行此操作:

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

关于emacs - 您如何使用 Paredit 注释掉全部或部分 Lisp s-exp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4288339/

相关文章:

找不到 Emacs 组织模式标签

lisp - 将列表中的汽车评估为 lisp 中的函数

function - 在 Lisp 中,如何通过作为参数传递的名称从宏中调用函数?

tree - 在 Lisp 中逐层遍历树(广度优先)

没有 paredit 的 Emacs Clojure 模式

emacs - 将 "follow-mode"状态添加到 Emacs 模式行

emacs - 如何让 Emacs 在保存文件之前查询用户(如果用户回答“否”则中止)?

emacs - 使用 Paredit 包装现有表达式

emacs - emacs 中的一键撤销