emacs上的lisp:如何注释多行表达式?

emacs上的lisp:如何注释多行表达式?,emacs,lisp,comments,Emacs,Lisp,Comments,例如,如果我想对此进行评论: (defun noop () nil) 每次我试着在“(defun)”前面加一个分号,defun就会跑到下一行。那该怎么做呢 GNU Emacs 23.1.1 编辑:我所说的“逃跑”是指当我在“(defun)”之前插入分号时,分号和“(defun”之后会自动插入一个换行符再次从新行开始。查看命令M-x comment region和相关命令。标记两行并调用M-x comment region。同时查看comment或uncomment region和comme

例如,如果我想对此进行评论:

(defun noop ()
  nil)
每次我试着在“(defun)”前面加一个分号,defun就会跑到下一行。那该怎么做呢

GNU Emacs 23.1.1


编辑:我所说的“逃跑”是指当我在“(defun)”之前插入分号时,分号和“(defun”之后会自动插入一个换行符再次从新行开始。

查看命令M-x comment region和相关命令。

标记两行并调用
M-x comment region
。同时查看
comment或uncomment region
comment dwim
函数。

M-x comment dwim
M-;
,这是前者的默认键绑定-可能会为您节省一些笔划,因为它不仅会注释,而且会取消注释区域(如果已经注释)。无论如何,请查看正确的描述。

Ron,执行
CTRL-H m
并查看次要模式。您有一些“有用”的次要模式处于活动状态。(可能
paredit
但我认为不是这样。)我记得当我尝试EMACS入门套件时,有过类似的情况。它持续了大约30秒,然后我尖叫着找到了如何杀死它的方法


在任何情况下,这都不是默认的EMACS行为,而是一些init文件或站点EMACS的添加。

如果您谈论的是Common Lisp(而不是EMACS Lisp),您可以使用
+(or)


有关详细信息,请参见。

对于您在标题中要求的特定任务(对可能同时跨多行的完整表达式进行注释),首先按
C-M-SPC
(绑定到
标记sexp
)将区域设置为表达式的下一点,然后按
M-;
(绑定到
comment dwim
,它将调用
comment region
)。

但是,到派对有点晚了,那么:

(defmacro comment (&rest a))

这对我来说很有效,这里没有逃逸。你是说当你在“(defun)”之前插入分号时,在它之后会自动插入一个换行符,并且“(defun”在新行上再次开始?这会很奇怪;这在我的emacs版本(GNU emacs 22.1和基于GNU emacs 22.3.1的Aquamacs emacs)中都没有发生是的,事情是这样的。GNU Emacs 23.1.1。你很可能已经安装了paredit。那么它是什么模式呢?键入
C-h k;
,Emacs会告诉你绑定了哪个命令分号,以及哪个库定义了它。从那里你应该可以知道你需要禁用什么。不幸的是,在我的Emacs M-x注释dwim i上N在行尾插入分号M-;插入三个分号和一个换行符。虽然需要几年的时间才能捕捉到这些宏解决方案,但这些宏解决方案不会非常有用,因为BODY仍需要无误地进行计算。
(defmacro comment (&rest a))