C++头文件中的emacs公共/保护/私有标签缩进在零偏移下无法工作

6

即使我在.emacs文件中定义了零偏移量,但是我无法在emacs中为我的C++头文件中的某些内容获得零偏移量。

下面的头文件显示了两个命名空间内的类定义,最重要的是我想要使用以下方式的public关键字来获得零偏移量。

namespace n1
{
namespace n2 // no offset
{

class SomeClass // no offset from namespace open curly
{
public: // this line with zero offset
    SomeClass(); // offset 4
    ...
};

inline SomeClass::SomeClass() // no offset
{
}

} // n2
} // n2

在我的.emacs文件中,我添加了这样的标签:
(c-set-offset 'label 0)

我使用Ctrl-C Ctrl-S找到要修改的内容。我在.emacs文件中定义的其他偏移量都很好用,而且label的值为0以外的其他值也可以正常工作。
当我将label的偏移量设置为0时,按下tab键后它变成了1。这很奇怪,看起来好像有其他东西覆盖或添加了至少1个值。
有人能解释一下我如何实现我的目标,也许还能解释一下当前发生了什么吗?
哎呀,这是我在这里的第一个问题。谢谢 :)
更新:
感谢答案,我已经能够走得更远了,但总体上仍没有解决方案,因为改变必要的事情以获得accessors的总偏移量为0会导致我不想要的其他事情发生。这就是我目前的情况:
(c-set-offset 'access-label 0)

我还需要让.h文件被识别为C++,所以我添加了:

(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))

单独这样做并不能消除我看到的1个偏移量,但似乎访问器中也有inclass。将其设置为0实际上会导致完全没有偏移。

(c-set-offset 'inclass 0)

问题是现在其他的项目,如成员,总数为0,如下所示:
class Foo
{
public:
Foo();
~Foo();

为了解决这个问题,我将 "topmost-intro" 改为偏移量 4。
(c-set-offset 'topmost-intro 4)

这反过来导致了其他变化,例如同一文件中的内联函数声明。总的来说,我不确定怎样才能按照我想要的方式进行微调。

更新2:

添加了无偏移量的SomeClass构造函数的内联声明。

4个回答

3
我相信您想要的是access-label而不是label。请参阅此处

我也是这样,仅凭访问标签还不够,但你提供的链接给了我必要的信息,即是在加1。 - murrekatt
顺便说一下,您可以保留类内偏移量并使用负偏移量来访问标签符号。 - Moberg

2
你需要使用access-label代替

这并没有完全得到我想要的结果,因为 access-label 0 会与 label 0 表现相同,1 偏移来自另一个。 - murrekatt
innamespace offset的值是多少?(我不会触及inclass,并注意负偏移值可能是累积的。) - AProgrammer
我也在研究这个问题,但这会影响其他事情,因为我想让命名空间内的东西具有0偏移量。也许我只需要改变我想要的外观方式? ;) - murrekatt

1

我认为您可能需要使用负数。例如,在我的 c-offsets-alist 中,我有:

(inclass . +)

然后在.emacs中:
(c-set-offset 'access-label -1)

这让我得到了我想要的结果:

class A {
 public:
  A();
  ...

1

If you use

(c-set-offset 'innamespace 0)

如果命名空间的左花括号没有增加缩进级别,则需要翻译。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接