我正在看这个question,并意识到我有一个类似的问题没有得到彻底的回答。
我希望访问说明符添加一定级别的缩进。在this和this页面上,我发现我需要缩进的句法符号是access-label。因此,我需要使用(c-set-offset 'access-label '0)
。
但是,这只会缩进包含访问标签的行,而不是后面的任何内容。我得到的就是这个,
class foo {
public:
void someFunc(); // Doesn't take the indentation of the access label into account
...
};
我想要的是,
class foo {
public:
void someFunc();
...
};
我该怎么做?是否有其他变量我想修改?
答案 0 :(得分:1)
您需要使用inclass
来设置缩进功能&班里的成员。
但这会导致功能和情况的发生。 struct
中的成员将缩进2个制表符,而不是一个,因此我们需要一个特殊的函数来设置正确的缩进宽度。我正在使用following config来实现这一点(我从互联网的某个地方获得了片段,也许来自emacswiki)...
答案 1 :(得分:1)
如果在新行上使用大括号,则上面的解决方法并不完全正确;你必须检查 如果在第一次转到你之前你是在一个开放式支架之前。这是我更常用的解决方法:
(defun agb/c++-mode-hook ()
(c-set-offset 'access-label '-)
(c-set-offset 'topmost-intro '0)
(c-set-offset 'inclass '(lambda (arg)
(let ((inclass (assoc 'inclass c-syntactic-context)))
(save-excursion
(goto-char (c-langelem-pos inclass))
(if (looking-at "{")
(goto-char (c-langelem-pos (assoc 'class-open (c-guess-basic-syntax)))))
(if (or (looking-at "struct")
(looking-at "typedef struct"))
'+
'++))))))