它缩进的原因是(默认情况下)多行注释与上一行注释的开始排列在一起。在这种情况下,包含注释的开始位于第47列。
现在,如何解决该问题。以下是我如何解决它的方法,解决方案在最后。
首先,有cc-mode manual,特别是关于customizing indentation的部分。一个有用的关键是C-c C-s
它告诉你哪个语法正在用于缩进。在这种情况下,它是((c 61))
- c
是现在的重要部分。
要以交互方式对其进行定制,您可以键入C-c C-o
(当点位于要修复缩进的行上时)。系统会提示您输入要自定义的语法条目(默认为c
,在这种情况下为b/c,即当前语法),然后系统会提示您是否要更改语法条目(默认为c-lineup-C-comments
) 。
现在我们可以看看该功能,看看我们如何定制它以满足您的需求。 M-x find-function c-lineup-C-comments
。
这就是它变得越来越困难的地方。您可以自定义cc-mode处理注释缩进的方式,但是看起来您希望它执行的操作(在这种情况下)是识别您正在使用的c注释之前是另一个 c注释, 评论是你想要排列缩进的人。
你是怎么做的?我能想到的最简单的方法是advise'c-lineup-C-comments
识别这种特殊情况,并将其第一个参数的值更改为您想要的值。我有限的测试表明这种方式更适合您的示例:
(defadvice c-lineup-C-comments (before c-lineup-C-comments-handle-doxygen activate)
(let ((langelm (ad-get-arg 0)))
(save-excursion
(save-match-data
(goto-char (1+ (c-langelem-pos langelem)))
(if (progn
(beginning-of-line)
;; only when the langelm is of form (c . something)
;; and we're at a doxygen comment line
(and (eq 'c (car langelm))
(looking-at "^\\(\\s-*\\)/\\*+//\\*\\*$")))
;; set the goal position to what we want
(ad-set-arg 0 (cons 'c (match-end 1))))))))
这个建议的最终结果应该是传递到c-lineup-C-comments
参数应转变从(c . 61)
到(c . 17)
(或类似的东西),基本上是愚弄程序进入在行首开始排队,而不是你正在修改的评论。
是有可能的块注释完全禁用缩进? – fakedrake 2011-08-26 12:59:26
@fakedrake你可以通过自定义各种评论风格变量来做到这一点。在上面的答案中查看cc模式手动链接的自定义部分。 – 2011-08-29 16:09:41