如何取消注释块 emacs 中的代码



我正在使用激活了主要模式"Java/L Abbrev"的emacs。当我键入M-x comment-regionM-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-endcomment-padding.

默认情况下,comment-start标记插入到 区域的当前缩进,注释终止 每行(即使对于换行符不结束的语法 注释和空行不会获得注释(。 这可以是 随着comment-style而改变。

所以答案是使用 C-u C-c C-c .

而FWIW,comment-regionM-;(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/

最新更新