现在C ++ 11已经出来了,我想知道当越来越多的代码从C ++ 98迁移到C ++ 11时,是否有任何关于改进Emacs缩进支持的技巧。
示例:
以下是我发现自己在努力解决的一些可疑问题:
struct m {
int a;
char b;
};
std::vector<m> foo { {1, 'a'},
{2, 'b'},
{ 3, 'c'},
{ 4, 'd' }};
我更喜欢
std::vector<m> foo { {1, 'a'},
{2, 'b'},
{ 3, 'c'},
{ 4, 'd' }};
甚至
std::vector<m> foo { {1, 'a'},
{2, 'b'},
{ 3, 'c'},
{ 4, 'd' }};
例如。
下一个:
cout << 5
<< [](int a) {
return 2 * a;
} (5);
我更喜欢
cout << 5
<< [](int a) {
return 2 * a;
} (5);
以便块相对于lambda缩进。
我发现自己花了更多时间在缩进上,这很烦人。
是否有任何包或自定义有助于缩进现代C ++ 11代码?
(旁注:我为Emacs设置了clang-format,但是我不能100%兼容现有代码,而且它还不能很好地理解C ++ 11语法。有时它仍然很有用并且听起来很有用对新项目来说是一个好主意。)
答案 0 :(得分:3)
我只是手动安装了最新的CC Mode 5.33 from SourceForge,它应该涵盖您要查找的大部分内容:
现在应该完全支持C ++ 11,以及C ++ 14的一些功能:
- 统一初始化
- Lambda函数
- 参数包
- 原始字符串
- 整数文字中的分隔符
- &#34;&GT;&GT;&#34;作为双模板ender
- 等
以下是我为您的示例所获得的缩进:
struct m {
int a;
char b;
};
std::vector<m> foo { {1, 'a'},
{2, 'b'},
{ 3, 'c'},
{ 4, 'd' }};
和
cout << 5
<< [](int a) {
return 2 * a;
} (5);
我还建议按MELPA中的建议安装modern-c++-font-lock
(例如通过this SO answer)。
答案 1 :(得分:1)
查看ClangFormat:
ClangFormat描述了一组构建于其上的工具 LibFormat。它可以通过多种方式支持您的工作流程,包括 一个独立的工具和编辑器集成。
它集成在emacs中:
(load "<path-to-clang>/tools/clang-format/clang-format.el")
(global-set-key [C-M-tab] 'clang-format-region)
您有many options来定义C ++ 11及更高版本的缩进样式。
Clang-Format样式选项描述可配置的格式样式 LibFormat和ClangFormat支持的选项。
几个例子:
AlignTrailingComments
AlwaysBreakTemplateDeclarations
答案 2 :(得分:-3)
当我使用emacs时,以下设置足以让我缩进代码:
; auto indent
(setq-default indent-tabs-mode nil)
(setq-default tab-width 2)
(define-key global-map (kbd "RET") 'newline-and-indent)
(defun indent-buffer ()
(interactive)
(save-excursion
(indent-region (point-min) (point-max) nil)))
(global-set-key [f12] 'indent-buffer)
希望它有所帮助。