使 Eclipse 的 Java 代码格式化程序忽略块注释

Posted

技术标签:

【中文标题】使 Eclipse 的 Java 代码格式化程序忽略块注释【英文标题】:Making Eclipse's Java code formatter ignore block comments 【发布时间】:2010-11-04 17:22:06 【问题描述】:

有没有办法让 Eclipse 的内置 Java 代码格式化程序忽略 cmets?每当我运行它时,它都会变成这样:

    /*
     * PSEUDOCODE
     * Read in user's string/paragraph
     * 
     * Three cases are possible
     * Case 1: foobar
     *         do case 1 things
     * Case 2: fred hacker
     *         do case 2 things
     * Case 3: cowboyneal
     *         do case 3 things
     *         
     * In all cases, do some other thing
     */

进入这个:

    /*
     * PSEUDOCODE Read in user's string/paragraph
     * 
     * Three cases are possible Case 1: foobar do case 1 things Case 2: fred
     * hacker do case 2 things Case 3: cowboyneal do case 3 things
     * 
     * In all cases, do some other thing
     */

我已经玩过 Windows > Preferences > Java > Code Style > Formatter 设置,但找不到用于保留注释格式的设置。我正在使用 Eclipse 3.4.0。

【问题讨论】:

它就在 Formatter 配置中,我不知道你怎么会错过它。编辑配置文件,有一个包含 8 个选项卡的对话框,最后一个选项卡用于注释格式。 我确实看到了评论选项卡,但无论我使用哪种复选框组合,都会出现格式问题。 How to turn off the Eclipse code formatter for certain sections of Java code? 的可能重复项 我在 Eclipse 中遇到了与 Scala 相同的问题,但以下解决方案是特定于 Java 的,因为 Scala 代码格式化程序选项卡有不同的选项。有没有办法关闭 Scala 的注释重新格式化? 【参考方案1】:

您可以使用另一种解决方案来抑制特定块 cmets 的格式设置。在块注释的开头使用/*-(注意连字符)和格式 如果您格式化文件的其余部分,则不会受到影响。

/*- * 这是一个带有一些非常特别的块注释 * 我希望 indent(1) 忽略的格式。 * * 一 * 二 * 三 */

来源:http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-141999.html#350

【讨论】:

以前从未见过,即使断章取义。 +1! 遗憾的是,这只适用于“常规”块 cmets,不适用于 Javadoc cmets。 完美版本:Juno Service Release 1。谢谢你,我的救命恩人! 当你有自己的格式化程序时,即使这很有用,它为每行开头附加星号并且你不希望默认格式化程序这样做,那么你可以使用 /*- ...... * / 很有用 2020 年仍然有效(版本:2020-06 (4.16.0)):-) 非常好【参考方案2】:

2010 年更新,如pointed by the OP 和in this answer,Eclipse 3.6 中的特殊字符串// @formatter:off 就足够了。

It was not available 提问时。


原答案:2009 年 6 月,Eclipse 3.4/3.5

使用 Java 格式化程序 (Windows > Preferences > Java > Code Style > Formatter),您可以创建新的格式化程序配置文件。

在“评论”选项卡中(在 eclipse3.5 中),您可以确保在“Javadoc comment settings”中取消选中“Format HTML tags”。 还要检查“General settings”部分中的“Never join lines”。

那么你的评论应该写成:

/**
 * PSEUDOCODE
 * Read in user's string/paragraph
 * 
 * Three cases are possible:
 * <dl>
 *   <dt>Case 1: foobar</dt>
 *     <dd>        do case 1 things</dd>
 *   <dt>Case 2: fred hacker</dt>
 *     <dd>        do case 2 things</dd>
 *   <dt>Case 3: cowboyneal</dt>
 *     <dd>        do case 3 things</dd>
 * </dl>        
 * In all cases, do some other thing
 */

注意:我做了一个Javadoc 注释,而不是一个简单的注释,因为我相信包含这么多文本的注释最好放在方法前面。此外,Javadoc 部分还有更多的格式化参数可供使用。 如果它位于方法前面(真正的 Javadoc),HTML tags &lt;dl&gt;, &lt;dt&gt; and &lt;dd&gt; 将有助于在 Javadoc 视图中正确显示它。

【讨论】:

对我来说,这个答案的相关部分是 HTML 标签不会自动插入换行符等。对大多数人来说可能很明显,但直到我在这里看到它,我才意识到我必须手动编码像 s 这样的东西。 @Lord Torgamus:不仅你必须添加这些标签,而且第一句在&lt;br /&gt;之前需要一个句号和一个空格! (见bugs.sun.com/bugdatabase/view_bug.do?bug_id=4165985) 我在 Eclipse 中遇到了与 Scala 相同的问题,但以下解决方案是特定于 Java 的,因为 Scala 代码格式化程序选项卡有不同的选项。有没有办法关闭 Scala 的注释重新格式化? 这没有回答问题【参考方案3】:

我刚刚从一位同事那里得知 Eclipse 提供了可以用于此目的的特殊格式标记:

// @formatter:off
/*
 * ╔════════╦═══════╦══════════╗
 * ║ Month  ║ Sales ║ Position ║
 * ╠════════╬═══════╬══════════╣
 * ║ June   ║ 44k   ║ 2nd      ║
 * ║ July   ║ 39k   ║ 2nd      ║
 * ║ August ║ 49k   ║ 4th      ║
 * ╚════════╩═══════╩══════════╝
 *
 * This comment shouldn't be formatted, and will now be ignored by the formatter.
 */
// @formatter:on

请注意,您可能需要通过 Preferences 菜单 → Java > Code Style > Formatter 手动启用此功能,点击 Edit,选择 Off/On Tags 选项卡并检查启用关闭/开启标签 (source)。

对字符串 @formatter:off 的快速 Google 将我带到了 this other SO answer,它在禁用代码块格式化程序的上下文中提到了此功能。我已经确认它也适用于行 cmets、“正常”块 cmets 和 Javadoc 块 cmets。

【讨论】:

你是如何让它为 JavaDoc cmets 工作的?我发现我必须在 JavaDoc cmets 之前和之后放置 line cmets 才能正常工作,就像你在这个答案中对块注释所做的那样。我希望我可以只为 JavaDoc 注释的一部分关闭格式化。 @MichaelScheper 已经有一段时间了,我记不清了……你试过VonC's advice吗? 这很好,因为它告诉 eclipse 也不要格式化代码。当您想保留自己的格式时很有用。【参考方案4】:

另一种可能性是在 Javadoc 中使用 HTML 的

/**
 * <pre>
 *    this
 *   is
 *      kept
 *  as
 *    is
 * </pre>
 */

至少这就是我倾向于将我的 ASCII-art 嵌入源代码 cmets 的方式:)

【讨论】:

请注意,如果 Eclipse 将
 标记的内容视为 java 代码(除非您取消选中 Window->Preferences->Java->Code Style->Formatter ->Edit...[Button]->Comments[Tab]->"Format Java code sn-ps inside 'pre' tags")
【参考方案5】:

&lt;pre&gt; &lt;/pre&gt;标签包围特定文本。

【讨论】:

【参考方案6】:

在 Eclipse 3.4 中:首选项,Java->代码样式->格式化程序,然后编辑配置文件,cmets 选项卡。那里有很多用于控制评论格式的选项。

【讨论】:

【参考方案7】:

如果你想在 Eclipse 中禁止格式化,你总是可以将不打算格式化的内容包装到 &lt;pre&gt;UNFORMATTED CONTENT&lt;/pre&gt; 标记中。 Javadoc 格式化程序会检测到该标记,并保留该标记之间的所有内容未格式化。

优点:

Javadoc 的其余部分仍处于格式化状态 由于 pre 标记,Javadoc 的 html 输出也将“未格式化”

缺点:

没有看到一个

【讨论】:

【参考方案8】:

一种解决方法是为您不希望 eclipse 格式化的 cmets 添加 pre 标签

/**
 * <pre>
 *    this part
 *   is
 *      out of
 *  format
 *    
 * </pre>
 */

【讨论】:

是的......但我看不出这对菲利普或托马斯凯勒几年前在他们的回答中已经说过的话增加了什么。【参考方案9】:

试试这个。这对我有用。 使用 Java Formatter(Windows > Preferences > Java > Code Style > Formatter),您可以从现有的 Formatter 配置文件中创建新的配置文件,然后对其进行编辑。

如果 Eclipse 不允许保存它,则创建一个新的并保存在其中。

【讨论】:

这是最近 Eclipse 的答案:您现在可以禁用任何注释格式(javadoc、块或内联)。【参考方案10】:

它取决于语言。

例如,如果使用 javascript,您将转到“窗口 -> 首选项 -> Javascript -> 代码样式 -> 格式化程序”,然后编辑格式化程序选项。

编辑(反映 OP 问题的变化

要编辑 java 代码格式,请转到 “窗口 -> 首选项 -> Java -> 代码样式 -> 格式化程序”

您将在面板顶部看到

活跃的个人资料: Eclipse [内置]

从那里您可以在右侧有一个按钮“编辑”,下方有两个按钮“新建...”和“导入...”。 我建议编辑现有的个人资料。

在编辑配置文件对话框中,顶部有一系列选项卡。最后一个标签是“评论”。要完全禁用注释格式,请取消选中“启用 Javadoc 注释格式”、“启用块注释格式”、“启用行注释格式”和“启用标题注释格式”。

【讨论】:

【参考方案11】:

您可以在 Windows - 首选项 - Java - 代码样式 - 格式化程序, 比单击编辑.. 按钮,找到评论, 选择从不加入线。

那么,应该没问题。

【讨论】:

以上是关于使 Eclipse 的 Java 代码格式化程序忽略块注释的主要内容,如果未能解决你的问题,请参考以下文章

关闭选定代码区域的 Eclipse 格式化程序? [复制]

Eclipse Java 格式化程序可以单独使用吗

java中搜索插件叫啥

如何使文本居中 - Eclipse for Android

eclipse编码格式设置教程如何为eclipse设置编码格式?

使用代码终止eclipse(在java中)