我正在使用激活了主要模式"Java/L Abbrev"的emacs。当我键入M-x comment-region
或M-x uncomment-region
时,所需的效果会在编辑器中发生。但是我厌倦了每次都打出来。
我发现我可以键入C-c C-c
并评论一个区域。我想找到一种类似的方法来取消评论一个地区。我去看 emacs 文档:
https://www.gnu.org/software/emacs/manual/html_node/ccmode/Comment-Commands.html
它说给C-c C-c
命令一个否定的参数来取消注释行。我该怎么做?还是有更好的方法?
请尝试M-;
,默认绑定到comment-dwim
。 我认为这应该做你想做的事。
您的问题是如何使用C-c C-c
取消注释该区域。
@AaronHarris回答了您关于使用负前缀 arg 的问题。
但我认为您误读了comment-region
的文档(CC 模式绑定到 C-c C-
(。它不会取消对该地区的注释。它会删除一定数量的注释字符。
要取消注释区域,请使用C-u
- 一个纯前缀 arg(没有显式数字(来取消注释该区域。 C-h f comment-region
说:
comment-region 是一个交互式编译的 Lisp 函数
newcomment.el
.它绑定到菜单栏编辑区域注释区域。
(comment-region BEG END &optional ARG)
注释或取消注释区域中的每一行。
只需
C-u
前缀 arg,取消注释区域BEG .. END
中的每一行。数字前缀
ARG
表示使用ARG
注释字符。如果
ARG
为负数,请改为删除该多注释字符。用作注释开头的字符串是从
comment-start
构建的 和comment-padding
;构建用作注释结尾的字符串 从comment-end
和comment-padding
.默认情况下,
comment-start
标记插入到 区域的当前缩进,注释终止 每行(即使对于换行符不结束的语法 注释和空行不会获得注释(。 这可以是 随着comment-style
而改变。
所以答案是使用 C-u C-c C-c
.
而FWIW,comment-region
比M-;
(comment-dwim
(评论和取消评论该地区要好得多。它允许您嵌套和取消嵌套任意数量的级别注释块。
comment-dwim
(DWIM 代表"做我的意思"(默认绑定到M-;
,并且根据区域是否处于活动状态(有时您所处的模式(而有所不同
从 emacs 帮助页面获取comment-dwim
:
comment-dwim is an interactive compiled Lisp function in
‘newcomment.el’.
It is bound to M-;.
(comment-dwim ARG)
Call the comment command you want (Do What I Mean).
If the region is active and ‘transient-mark-mode’ is on, call
‘comment-region’ (unless it only consists of comments, in which
case it calls ‘uncomment-region’).
Else, if the current line is empty, call ‘comment-insert-comment-function’
if it is defined, otherwise insert a comment and indent it.
Else if a prefix ARG is specified, call ‘comment-kill’.
Else, call ‘comment-indent’.
You can configure ‘comment-style’ to change the way regions are commented.
TLDR:使用C-- C-c C-c
;即在命令前面加上"control-hyphen">
若要为命令提供否定参数,需要调用 negative-argument
命令或 universal-argument
命令,并提供否定参数。 (有关这些内容的更多信息,请尝试C-h f
。
negative-argument
命令绑定到键 C--
、 M--
和 C-M--
键,因此所有这些键都将用作前缀;通常,您将使用最方便键入的任何给定命令的键。
universal-argument
命令绑定到C-u
并紧随其后接受其参数,因此您也可以执行C-u -
,可选后跟零个或多个数字(例如,C-u - 5 3 9
(;这个在这里是矫枉过正的,但很高兴知道。
最后,这里是 Emacs 手册中讨论这个主题的部分。
为什么不将uncomment-region
命令映射到键?这不是您真正想要的(以前的答案对此更好(,但这是一种每次都停止输入M-x uncomment-region
的方法
像这样(使用您想要的键绑定(
(global-set-key (kbd "C-c C-u") 'uncomment-region)
有关键绑定的文档可在此处找到:用于绑定键的命令 自定义键
绑定
这是命令的映射:
命令的映射
您可以使用C-h k
(M-x describe-key
(来显示绑定到特定密钥的命令(因此您确保不会擦除它(,C-h f
(M-x describe-function
(将显示函数的描述+其绑定。
-
首先,选择区域
-
要发表评论,请使用
ALT + x 注释区域
-
要取消评论,请使用
ALT + x 取消注释区域
学分:https://www.reddit.com/r/emacs/comments/1kklgl/command_to_uncomment_entire_comment_block/