如何在Emacs中在多行开头添加#号?

27

我需要在Python中注释掉一些代码块。我该如何使用emacs实现?如何在代码块的每行开头添加 # 字符?


5
“With good ol' M-x butterfly”是一个笑话。可以将其翻译为“使用好老的M-x蝴蝶命令”。 - Patrick
4个回答

70
您可以使用comment-region命令,方法如下:
M-x comment-region

编辑:根据@Gilles的建议,您可以使用 M-;,其根据帮助文档是:

调用所需的注释命令(Do What I Mean)。

如果区域处于活动状态并且'transient-mark-mode'打开,则调用'comment-region'(除非它只包含注释,在这种情况下它将调用'uncomment-region')。 否则,如果当前行为空,则调用'comment-insert-comment-function'(如果定义了),否则插入注释并对其进行缩进。 否则,如果指定了前缀参数,则调用'comment-kill'。 否则,调用'comment-indent'。

这样可能更容易理解。 :-) 请记住,这是“模式依赖性”的,因此在使用 M-x python-mode 注释之前,您需要设置 python-mode。

或者,如果您想在每一行前加上任何类型的字符,请选择要注释的文本,然后键入

C-x r t

输入你想要添加前缀的字符。请记住,插入符号必须位于所选最后一行的第一列,否则您的文本将被替换。

按C-space选择文本并移动插入符号。


2
这与M-x string-insert-rectangle RET string RET相同。 - Zitrax
9
还有一个快捷键是M-;comment-dwim),可以对区域进行注释(如果区域已经被注释了,则取消注释)。 - Gilles 'SO- stop being evil'
1
但是comment-region会在第一个非空白位置插入注释字符。如果我想在每行的最左边位置插入注释字符怎么办? - Mike Makuch

2
这是一个链接,描述了如何使用矩形模式中的任意字符完成此操作。
这很方便,因为它只针对所选文本区域进行操作。

1

1
一种方法是定义一个简单的键盘宏。
C-x (
C-a
#
C-n
C-x )

然后您可以使用100行以上的代码来执行它

M-1 0 0 C-x e

不一定是最高效的解决方案,但容易记住


F3 # F4应用于该区域,然后标记该区域,最后执行C-x C-k r命令。 - phils
4
但是你会重新发明轮子:'comment-region' 是 Emacs 中最基本的命令之一。我每天会使用它数百次。 - Joel J. Adamson
+1。不确定为什么被踩。如果你只是需要完成工作但忘记了快捷方式,宏是一个很好且多功能的解决方法。 - armandino
可能是因为它回答了@OP提出的问题,而不是他想要问的问题,即关于注释代码区域的问题。而对此的答案很简单,只需标记行,并使用M-;或M-x comment-region。这显然是他想要的,你也可以使用M-;取消注释一个区域,所以这是一个绝对优秀的解决方案。 - Haakon Løtveit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接