CDT代码格式化程序有相当不错的选项,但似乎没有一个特性可以让用户告诉它忽略一段代码。这个特性在Java代码格式化程序中存在:
// @formatter:off
... // code that should not be formatted
// @formatter:on
这个功能是否存在而我不知道,或者有没有人知道任何好的解决方法?
在我的具体情况中,我正在尝试定义数据结构(枚举类型和字符串数组),我希望它们具有特定的布局。
CDT代码格式化程序有相当不错的选项,但似乎没有一个特性可以让用户告诉它忽略一段代码。这个特性在Java代码格式化程序中存在:
// @formatter:off
... // code that should not be formatted
// @formatter:on
这个功能是否存在而我不知道,或者有没有人知道任何好的解决方法?
在我的具体情况中,我正在尝试定义数据结构(枚举类型和字符串数组),我希望它们具有特定的布局。
http://astyle.sourceforge.net/astyle.html#_Disable_Formatting
例子:
#include <iostream>
int main(int argc, char** argv)
{
// *INDENT-OFF*
std::cout<<"hello world"<<'\n';
// *INDENT-ON*
}
我自己将其配置为外部工具。
唯一的问题是外部工具没有热键,但有一个热键可以“运行最后启动的外部工具”,如果您只使用一个外部工具,它将起到同样的作用。
更多关于配置的细节(Linux):
Astyle:
您可以轻松地从发行版存储库或官方网站获取它。
要设置一个带有格式设置的配置文件:
http://astyle.sourceforge.net/astyle.html#_Options_File
我使用home文件夹变量,只需在您的$ HOME中创建.astylerc文件,我的包含:
--suffix=none
--style=allman
--indent=tab=4
--max-code-length=70
--close-templates
--keep-one-line-blocks
--break-elseifs
--break-closing-brackets
--align-reference=type
--align-pointer=type
--indent-classes
--indent-modifiers
--indent-switches
--indent-cases
--indent-labels
--indent-col1-comments
--min-conditional-indent=0
--pad-oper
--pad-header
--unpad-paren
Eclipse:
“运行”菜单--> “外部工具” --> “外部工具配置...” 添加一个新的“程序”,在配置窗口中:
位置:/usr/bin/astyle(使用whereis或locate来检查)
工作目录:${project_loc}
参数:${selected_resource_loc}
在同样的窗口中,刷新选项卡:
选中“完成后刷新资源”。
选中“所选资源”
同一窗口,常见选项卡:
// *INDENT-OFF*
对任何人都有效吗?在我的astyle v2.03中,它被忽略了。 - veio是的,你可以这样做,因为CDT从9.7版本开始支持此功能。行为与JDT完全相同。
clang-format
,它对我们来说非常有效,非常灵活,可以适应我们所需的样式。 - Freerobots// @formatter:off
<code> // @formatter:on
- Freerobotsclang-format
和CppStyle
。 clang-format
是一个格式化程序实用程序,它与Clang
一起提供,并支持在C/C++/ObjC代码中的on/off注释// clang-format on
和// clang-format off
。可以在此处找到有关构建Clang
及其实用工具的介绍。http://clang.llvm.org/get_started.html 您不需要在系统上安装整个Clang
和LLVM
文件,因为clang-format
是一个独立的程序,可以在没有Clang
的情况下工作。旧版本不支持on/off注释,请使用2015年2月的SVN版本3.7。
CppStyle
是一款Eclipse插件,它使我们能够在Eclipse CDT中使用clang-format
。https://github.com/wangzw/cppstyle
顺便提一下,在CDT Bugzilla中有同样的功能请求。这个功能可能会在未来得到官方支持,但目前使用clang-format
或Astyle
似乎是更好的解决方案。https://bugs.eclipse.org/bugs/show_bug.cgi?id=453926
我想我可以把这些内容放在一个扩展名被格式化程序忽略的文件中,并在适当的地方包含这个文件。我试过了,它可以工作 - 数据结构会被索引器捕捉到(即自动完成功能可用)。不过,如果有类似于Java中的“@formatter:...”语法的等效语法就更好了。