无论模式如何,emacs都可以取消注释

时间:2012-10-14 22:28:21

标签: emacs comments equals region

主要目标:制作适合任何模式的智能“取消注释”功能。

(defun uncomment-mode-specific ()
  (interactive)
  (if (region-active-p)
      (comment-region (region-beginning) (region-end) -1)  ; so far so good
    (if (= ";" (line-beginning-position))                   ; here is the problem
         (message "successful")
       (message "unsuccessful"))
))

if语句中,我想检查该行的第一个字符的值,以及equals变量comment-start(它将返回“{{ 1)}“在emacs lisp中”,转到;并删除该字符。想法?

编辑:根据以下评论中的要求进行更多说明。我想要一个功能:

1)如果选择了某个区域,请删除评论(这里注释为取消评论区域或评论-dwim将如Patrick所指出的那样)

ELSE:

2)如果该点的第一个字符是注释字符,请删除注释字符。

ELSE:

3)搜索当前行以进行评论(不包括beginning-of-line\%,取决于模式),向上移动以评论并从评论标记开始删除该行。

我看不出你希望这种方式有何不同。然后可以绑定到一个键,只需删除注释,具体取决于模式,使用\;来标识注释字符。

1 个答案:

答案 0 :(得分:3)

我将此作为替代答案发布,因为您尝试执行的操作已部分使用comment-dwim命令完成。从文档(您可以使用C-h f comment-dwim

找到它
  

comment-dwim是一个交互式编译的Lisp函数   `newcomment.el”。

     

它与M-;绑定。

     

(comment-dwim ARG

     

调用你想要的评论命令(做我的意思)   如果该区域处于活动状态且transient-mark-mode已启用,请致电     comment-region(除非它只包含评论,其中     它调用uncomment-region)。
  否则,如果当前行为空,请致电comment-insert-comment-function   如果已定义,则插入注释并缩进。   否则,如果指定了前缀 ARG ,请致电comment-kill。   否则,请致电comment-indent   您可以配置comment-style来更改区域的评论方式。

因此,为了使用它,只需选择一个C-SPC区域(set-mark-command)并将插入符号移动到另一个点并运行comment-dwim

相关问题