Emacs缩进模板类/函数

6

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

目前的结果是:

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

where I would like to have:

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

非常感谢你的帮助。 编辑 1 我正在使用c++-mode,并将其设置为c ++的缩进样式。我按照以下方式自定义了c-offset-alist:
(custom-set-variables 
;;
'(c-offsets-alist (quote ((case-label . +) (innamespace . 0))))

1
你有在 .emacs 文件里写过东西吗?我默认可以获取到你请求的那个。我使用了 emacs -Q 命令启动 emacs。 - vpit3833
@vpit3833,我编辑了问题以使情况更加清晰。 - Luca Martini
4个回答

9

前往class行,按下TAB键进行(不必要的)缩进。
然后按下Control-CControl-O以显示顶部介绍内容的缩进模式

按下ENTER键,然后您可以更改缩进数字(例如3到0)。

在您的.emacs文件的末尾,您可以永久设置该指令:

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

我该如何按下^C^o?谢谢! - Beginner

4

Emacs的C++模式有不同的缩进样式。 请参考EmacsWiki

一些较为知名的C样式列表如下:

  • “gnu”:GNU项目的默认样式
  • “k&r”:Kernighan和Ritchie在他们的书中使用的样式
  • “bsd”:BSD开发人员使用的样式,也称为“Allman风格”,以Eric Allman命名
  • “stroustrup”:C++作者Stroustrup在他的书中使用的样式
  • “linux”:Linux开发人员用于内核开发的样式
  • “python”:Python开发人员用于扩展模块的样式
  • “java”:java-mode的默认样式(见下文)
  • “user”:当您想定义自己的样式时

c-default-style变量是您需要更改的内容。也许其中一个会是您需要的。我现在没有Emacs,所以无法进行检查。


非常感谢。我已经选择了java作为C++的缩进风格,并使用c-offsets-alist为命名空间进行了自定义。我想知道是否有可能对模板执行相同的操作。 - Luca Martini

1

我不知道,但我想象你的模式会有所不同。你正在使用什么模式进行编辑?我假设是c++模式,因为你有c++作为标签。

对于我来说,在c++模式下,它变成了这样:

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

注释缩进,但class A不缩进。


1
有几个不同的事情需要检查:
当在 C-mode 而不是 C++-mode 中编辑 C++ .h 文件时,我看到了类似的问题。默认情况下,.h 文件是 C-mode,而不是 C++-mode。[您可以通过在窗口底部查找括号中的 "C++" 或 "C" 来检查此内容。] 您可以在您的 .emacs 中使用以下设置,将 emacs 始终打开 .h 文件作为 C++。
(setq auto-mode-alist (append '(("\\.h\\'"   . c++-mode)
                )
                  auto-mode-alist
                  ))

另外要检查的是你如何设置c-default-style。 "CC Mode" 的信息页面更详细地介绍了所有可能性。


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