【发布时间】:2012-10-14 22:28:21
【问题描述】:
主要目标:制作适用于任何模式的智能“取消注释”功能。
(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(在emacs lisp 中将返回“;”) ,转到beginning-of-line 并删除该字符。想法?
编辑:以下评论中要求的更多说明如下。我想做一个函数:
1) 如果选择了一个区域,则删除 cmets(这里 uncomment-region 或 comment-dwim 将按照 Patrick 所指出的那样工作)
否则:
2) 如果该点所在行的第一个字符是注释字符,则删除注释字符。
否则:
3) 搜索当前行的注释(不包括\% 或\;,取决于模式),向上移动到注释并终止以注释符号开头的行。
我看不出您希望它如何以不同的方式工作。然后可以将其绑定到一个键以简单地删除 cmets,具体取决于模式,使用 comment-start 来识别注释字符。
【问题讨论】:
-
M-x uncomment-region有什么问题? -
我有点想要一些修改过的行为。但我认为这是一个很好的起点。在评论“;”的情况下缺少的是“如果”上线后,我更希望它杀死 ;. 之后的部分
-
我相信它应该是这个顺序:1)如果选择了一个区域,那么这确实有效。如果未选择任何内容,则 2) 检查行首字符是否 = 注释字符(如果是,则删除)。 3)如果没有选择任何内容,并且行首没有注释,则增量搜索到注释字符,然后对其进行kill-line。这似乎是最好的功能类型。
-
现在卡在增量搜索中 :(
-
还可以查看
C-h f comment-dwim,您需要为该命令指定一个区域,但您可以查看定义函数的文件 newcomment.el 以至少了解它是如何工作的。
标签: emacs comments equals region