【问题标题】:How to uncomment blocks code in emacs如何取消注释emacs中的块代码
【发布时间】:2018-08-08 17:50:10
【问题描述】:

我正在使用激活主模式“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 命令一个否定的参数来取消注释行。我该怎么做呢?或者,还有更好的方法?

【问题讨论】:

    标签: emacs comments


    【解决方案1】:

    请尝试M-;,默认绑定到comment-dwim。我认为这应该做你想做的。

    【讨论】:

      【解决方案2】:

      comment-dwim(DWIM 代表“Do What I mean”)默认绑定到 M-;,并且根据该区域是否处于活动状态(有时您处于什么模式)而有所不同

      来自 comment-dwim 的 emacs 帮助页面:

      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.
      

      【讨论】:

        【解决方案3】:

        您的问题是如何使用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.

        绑定到menu-bar编辑区comment-region。

        (comment-region BEG END &optional ARG)

        注释或取消注释该区域中的每一行。

        仅使用 C-u 前缀 arg,取消注释区域 BEG .. END 中的每一行。

        数字前缀ARG 表示使用ARG 注释字符。

        如果ARG 是否定的,请删除那么多评论字符。

        用作注释开始的字符串是从comment-start 构建的 和comment-padding;构建用作注释结尾的字符串 来自comment-endcomment-padding

        默认情况下,comment-start 标记插入到 该区域的当前缩进,并且 cmets 终止于 每一行(即使是换行符不结束的语法) 注释和空行不会得到 cmets)。这可以是 更改为comment-style

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

        FWIW,comment-regionM-; (comment-dwim) 评论和取消评论该地区要好得多。它允许您嵌套和取消嵌套任意数量的级别的评论块。

        【讨论】:

          【解决方案4】:

          TLDR:使用C-- C-c C-c;即,在您的命令前加上“控制连字符”

          要为命令提供否定参数,您需要调用negative-argument 命令或universal-argument 命令,提供否定参数。 (请尝试C-h f 了解有关这些的更多信息。)

          negative-argument 命令绑定到键 C--M--C-M--,因此所有这些都将作为前缀工作;通常,对于任何给定的命令,您都会使用最方便键入的那个。

          universal-argument 命令绑定到C-u 并在此之后立即接受其参数,因此您也可以使用C-u -,可选地后跟零个或多个数字(例如,C-u - 5 3 9);那个在这里有点矫枉过正,但很高兴知道。

          最后,here 是 Emacs 手册中讨论此主题的部分。

          【讨论】:

            【解决方案5】:

            为什么不将uncomment-region 命令映射到一个键?这不是您真正要求的(以前的答案对此更好),但它是一种停止每次输入M-x uncomment-region 的方法

            像这样(用你想要的键绑定)

            (global-set-key (kbd "C-c C-u") 'uncomment-region)
            

            关于键绑定的文档可以在这里找到:
            Commands for Binding Keys
            Customizing Key Bindings

            这里是命令图:
            Map of command

            您可以使用C-h k (M-x describe-key) 来显示绑定到特定键的命令(因此您一定不会删除它),C-h f (M-x describe-function) 将向您显示函数 + 它的绑定。

            【讨论】:

              【解决方案6】:
              • 首先,选择地区

              • 要评论,请使用

                ALT + x 注释区域

              • 要取消注释,请使用

                ALT + x 取消注释区域

              致谢:https://www.reddit.com/r/emacs/comments/1kklgl/command_to_uncomment_entire_comment_block/

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-10-02
                • 2011-04-14
                • 2012-10-07
                • 2011-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-08-25
                • 2014-07-11
                相关资源
                最近更新 更多