19

CDT 代码格式化程序有一个相当不错的选项选择,但它似乎不需要允许人们告诉它忽略一段代码的功能。此功能存在于 Java 代码格式化程序中:

// @formatter:off
... // code that should not be formatted
// @formatter:on

这个功能是否存在而我只是不知道,或者有没有人知道任何体面的解决方法?

在我的特殊情况下,我正在尝试定义我想要具有特定布局的数据结构(枚举类型和字符串数组)。

4

5 回答 5

5

使用 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}

在同一窗口中,刷新选项卡:

  • 完成后勾选刷新资源。

  • 勾选“所选资源”

相同的窗口,公共选项卡:

  • 在收藏夹菜单中显示,勾选“外部工具”
于 2015-02-06T11:05:06.140 回答
3

是的,您可以这样做,因为 CDT 从版本 9.7 开始支持此功能。行为与 JDT 完全相同。

于 2019-02-20T06:11:35.087 回答
1

如果您使用的是 OS X 或 Linux(我没有检查过 Windows,但它可能受支持),您可以使用clang-formatandCppStyle代替。

clang-format是随 提供的格式化程序实用程序Clang,它支持开/关注释// clang-format on// clang-format offC/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-formatAstyle似乎是更好的解决方案。https://bugs.eclipse.org/bugs/show_bug.cgi?id=453926

于 2015-02-08T09:03:55.013 回答
0

据我所知,答案是否定的,这样的功能不存在。不过,您也许可以使用 SDK 实现这样的功能。请注意,根据我的经验,文档非常不完整,很难找到愿意帮助您填补漏洞的 Eclipse 开发人员。但是由于该功能存在于 Java 格式化程序中并且它是一个开源产品,也许您可​​以将逻辑移植到 C++ 格式化程序。

您还可以避免格式化整个文件,而是仅通过选择进行格式化。

于 2015-02-06T09:35:06.153 回答
0

我想我可以将它们粘贴在格式化程序忽略扩展名的文件中,并在适当的地方包含此文件。我试过了,它起作用了——数据结构被索引器拾取(即自动完成工作)。不过,如果有一个等效于 Java "@formatter:..." 的语法,那就太好了。

于 2013-06-02T20:16:27.430 回答