在Emacs中抑制C++命名空间缩进

21

可能是重复问题:
Emacs - override indentation

我想要的是 Emacs 不缩进命名空间内的代码。

namespace a_namespace{

// no indentation
int namespace_global_variable;


// no indentation
class Class {
    // comment
    Class();
    //...
};

// and so on


}

当我尝试修改innamespace变量或使用C-c C-o来更改感兴趣的位置的缩进时,我没有得到期望的效果(事实上后者会杀死函数内所有缩进)。

我的缩进配置如下(从Google emacs配置复制):

(c-offsets-alist . ((arglist-intro vista-c-lineup-expression-plus-4)
                    (func-decl-cont . ++)
                    (member-init-intro . +)
                    (inher-intro . ++)
                    (comment-intro . 0)
                    (arglist-close . c-lineup-arglist)
                    (topmost-intro . 0)
                    (block-open . 0)
                    (inline-open . 0)
                    (substatement-open . 0)
                    (statement-cont
                     .
                     (,(when (fboundp 'c-no-indent-after-java-annotations)
                         'c-no-indent-after-java-annotations)
                      ,(when (fboundp 'c-lineup-assignments)
                         'c-lineup-assignments)
                      ++))
                    (label . /)
                    (case-label . +)
                    (statement-case-open . +)
                    (statement-case-intro . +) ; case w/o {
                    (access-label . /)
                    (innamespace . -))))

似乎与此处相同:https://dev59.com/wnE85IYBdhLWcg3wwWet。 - Saddle Point
那个解决方案对我不起作用(可能是用户错误)。 - Dave
这不是严格的重复,因为另一个问题要求有一些缩进,而这个问题则要求没有缩进。可能没有缩进的解决方案比“一些缩进并将数量设置为零”的解决方案更好。 - GreenAsJade
2
只需执行 (c-set-offset 'innamespace '0) - skyfire
1个回答

19
(defconst my-cc-style
  '("cc-mode"
    (c-offsets-alist . ((innamespace . [0])))))

(c-add-style "my-cc-mode" my-cc-style)

来自Jason Zhang答案。在这里有效。


仅仅在现有的“c-offsets-alist”中用“[0]”替换“-”并不能解决问题。 - Dave
现在看起来它可以工作了 - 我不确定emacs需要什么才能重新读取其初始化文件。 - Dave
10
即使我重启了Emacs,但这个方法对我并没有奏效。不过(c-set-offset 'innamespace 0)这个方法可行(取自于http://brrian.tumblr.com/post/9018043954/emacs-fu-dont-indent-inside-of-c-namespaces)。 - user1781434
2
请注意,这段代码的答案中提到了“然后使用c-set-style来使用您自己的样式。” 这是一个非常重要的遗漏信息。 - GreenAsJade
这是一段有关 Emacs 的旧内容,用于“重新读取其初始化文件”的命令为:<M>-x eval-buffer(在访问 .emacs 文件或你所命名的任何其他文件时)。 - Geof Sawaya
在定义新样式或更新现有样式后,您可以在访问包含您的代码的缓冲区时使用 c-set-style。它会要求您选择所需的样式。只需选择您修改过的样式,您应该会注意到您的样式更改的效果。 - darcamo

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