Emacs缩进模板类/函数

时间:2010-11-24 09:06:12

标签: c++ templates emacs

有人知道如何禁止emacs在模板子句后缩进函数或类的名称吗?

当前的结果是:

template <typename T>
    class A {
    /* ... */
    };

我想要的地方:

template <typename T>
class A {
/* ... */
};

非常感谢你的帮助。

编辑1 我正在使用c ++ - 模式,java作为c ++的缩进样式。我用这种方式定制了c-offset-alist:

(custom-set-variables 
;;
'(c-offsets-alist (quote ((case-label . +) (innamespace . 0))))

4 个答案:

答案 0 :(得分:8)

转到class行并点击TAB以执行(未经请求的)缩进。
然后按 Control-C Control-O to display the indent mode for topmost-intro-cont`

ENTER,然后您可以更改缩进号码(例如3到0)。

.emacs结束时,您可以永久设置该指令:

  (c-set-offset 'topmost-intro-cont 0 nil)

答案 1 :(得分:3)

Emacs的C ++模式有不同的缩进样式。 Quoting EmacsWiki

更熟知的C样式的部分列表:

  • “gnu”:GNU项目的默认样式
  • “k&amp; r”:C的作者Kernighan和Ritchie在他们的书中使用了什么
  • “bsd”:BSD开发人员使用的是Eric Allman之后的“Allman风格”。
  • “stroustrup”:什么Stroustrup,他的书中使用的C ++的作者
  • “linux”:Linux开发人员用于内核开发的内容
  • “python”:Python开发人员用于扩展模块的内容
  • “java”:java模式的默认样式(见下文)
  • “user”:当您想要定义自己的风格时

c-default-style变量是您需要更改的内容。也许其中一个将是你需要的。现在没有Emacs,所以我无法查看它们。

答案 2 :(得分:0)

我不知道,但我想你的模式会有所作为。你在什么模式编辑?我假设c ++ - 模式导致你有c++作为标记。

对我来说,在c ++模式下,结果如下:

template <typename T>
class A {
   /* ... */
};

评论缩进,但class A没有缩进。

答案 3 :(得分:0)

要检查几件不同的事情:

我在C模式而不是C ++模式下编辑C ++ .h文件时遇到了类似的问题。默认情况下,.h文件是C模式,而不是C ++模式。 [您可以通过在窗口底部的括号中查找“C ++”或“C”来检查这一点。]您可以设置emacs以始终使用.emacs中的以下内容将.h文件作为C ++打开

(setq auto-mode-alist (append '(("\\.h\\'"   . c++-mode)
                )
                  auto-mode-alist
                  ))

要检查的另一件事是你如何设置你的c-default风格。 “CC模式”的信息页面详细介绍了所有可能性。