CDT 代码格式化程序有一个相当不错的选项选择,但它似乎不需要允许人们告诉它忽略一段代码的功能。此功能存在于 Java 代码格式化程序中:
// @formatter:off
... // code that should not be formatted
// @formatter:on
这个功能是否存在而我只是不知道,或者有没有人知道任何体面的解决方法?
在我的特殊情况下,我正在尝试定义我想要具有特定布局的数据结构(枚举类型和字符串数组)。
CDT 代码格式化程序有一个相当不错的选项选择,但它似乎不需要允许人们告诉它忽略一段代码的功能。此功能存在于 Java 代码格式化程序中:
// @formatter:off
... // code that should not be formatted
// @formatter:on
这个功能是否存在而我只是不知道,或者有没有人知道任何体面的解决方法?
在我的特殊情况下,我正在尝试定义我想要具有特定布局的数据结构(枚举类型和字符串数组)。
使用 Astyle(Artistic Style)格式化程序,它远优于 Eclipse CDT 内置格式化程序,并具有您需要的功能:
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*
}
使用 astyle 对此进行格式化不会缩进 // INDENT-OFF和 // INDENT-ON之间的代码,但它也会禁用 astyle 所做的任何其他格式化功能,例如本例中的指令间距。
我使用它自己配置为外部工具。唯一的问题是,外部工具没有热键,但是“运行上次启动的外部工具”只有一个热键,如果你只使用一个外部工具,它的工作原理是一样的。
有关配置的更多详细信息(linux):
风格:
您可以从您的分发存储库或通过官方网站轻松获取它。
要使用格式设置设置配置文件:
http://astyle.sourceforge.net/astyle.html#_Options_File
我使用主文件夹变体,只需在 $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
蚀:
“运行”菜单 --> 外部工具 --> 外部工具配置... 添加一个新的“程序”并在配置窗口中:
位置:/usr/bin/astyle(使用 whereis 或 locate 来检查)
工作目录:${project_loc}
参数:${selected_resource_loc}
在同一窗口中,刷新选项卡:
完成后勾选刷新资源。
勾选“所选资源”
相同的窗口,公共选项卡:
是的,您可以这样做,因为 CDT 从版本 9.7 开始支持此功能。行为与 JDT 完全相同。
如果您使用的是 OS X 或 Linux(我没有检查过 Windows,但它可能受支持),您可以使用clang-format
andCppStyle
代替。
clang-format
是随 提供的格式化程序实用程序Clang
,它支持开/关注释// clang-format on
和// clang-format off
C/C++/ObjC 代码。可以在此处找到有关构建Clang
及其实用工具的介绍。
http://clang.llvm.org/get_started.html
您不需要在系统上安装整个Clang
文件LLVM
。因为clang-format
是一个独立程序,无需Clang
. 旧版本不支持开/关注释,因此请使用 3.7 版(截至 2015 年 2 月可从 SVN 获得)。
CppStyle
是一个 Eclipse 插件,它使我们能够clang-format
从 Eclipse CDT 中使用。
https://github.com/wangzw/cppstyle
供参考。这是 CDT Bugzilla 中的相同功能请求。将来可能会正式支持该功能,但目前使用clang-format
或Astyle
似乎是更好的解决方案。https://bugs.eclipse.org/bugs/show_bug.cgi?id=453926
据我所知,答案是否定的,这样的功能不存在。不过,您也许可以使用 SDK 实现这样的功能。请注意,根据我的经验,文档非常不完整,很难找到愿意帮助您填补漏洞的 Eclipse 开发人员。但是由于该功能存在于 Java 格式化程序中并且它是一个开源产品,也许您可以将逻辑移植到 C++ 格式化程序。
您还可以避免格式化整个文件,而是仅通过选择进行格式化。
我想我可以将它们粘贴在格式化程序忽略扩展名的文件中,并在适当的地方包含此文件。我试过了,它起作用了——数据结构被索引器拾取(即自动完成工作)。不过,如果有一个等效于 Java "@formatter:..." 的语法,那就太好了。