如何为代码块禁用Eclipse CDT代码格式化程序

时间:2013-06-02 20:16:27

标签: c++ eclipse-cdt code-formatting

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

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

这个功能是否存在,我只是不知道,或者有没有人知道任何体面的工作?

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

5 个答案:

答案 0 :(得分:5)

使用Astyle(艺术风格)格式化程序,它远远优于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)的更多详细信息:

的astyle:

您可以从您的分发存储库或官方网站轻松获取它。

使用格式设置设置配置文件:

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

蚀:

“运行”菜单 - &gt;外部工具 - &gt;外部工具配置...添加新的“程序”并在配置窗口中:

  • 位置:/ usr / bin / astyle(使用whereis或find来检查)

  • 工作目录:$ {project_loc}

  • 参数:$ {selected_resource_loc}

在同一窗口中,刷新标签:

  • 完成后勾选刷新资源。

  • 勾选“所选资源”

相同窗口,常用标签:

  • 在收藏夹菜单中显示,勾选“外部工具”

答案 1 :(得分:3)

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

答案 2 :(得分:1)

如果您使用的是OS X或Linux(我没有检查过Windows,但可能会受到支持),您可以改用clang-formatCppStyle

clang-format是一个格式化程序实用程序,随Clang一起提供,它支持C / C ++ / ObjC代码中的开/关注释// clang-format on// clang-format off。可以在此处找到构建Clang及其实用工具的简介。 http://clang.llvm.org/get_started.html 您无需在系统上安装整个ClangLLVM文件。因为clang-format是一个独立的程序,没有Clang。旧版本不支持开/关注释,因此请使用版本3.7(自2015年2月起可从SVN获得)。

CppStyle是一个Eclipse插件,它允许我们使用Eclipse CDT中的clang-formathttps://github.com/wangzw/cppstyle

FYI。以下是CDT Bugzilla中的相同功能请求。该功能可能在将来得到官方支持,但目前使用clang-formatAstyle似乎是更好的解决方案。 https://bugs.eclipse.org/bugs/show_bug.cgi?id=453926

答案 3 :(得分:0)

我想我可以将它们粘贴在格式化程序忽略的扩展名的文件中,并在适当的位置包含此文件。我尝试了这个并且它有效 - 数据结构被索引器(即自动完成工作)。尽管如此,拥有Java“@formatter:...”语法的等价物会很好。

答案 4 :(得分:0)

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

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