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

86

有没有办法让Eclipse内置的Java代码格式化程序忽略注释?每次运行时,它会将这个变成:

    /*
     * 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。


在格式化程序配置中就在那里,我不知道你怎么会错过它。编辑个人资料,有一个带有8个选项卡的对话框,最后一个选项卡是用于评论格式化的。 - skaffman
我确实看到了评论选项卡,但无论我使用哪种复选框组合,都会出现格式问题。 - Pops
我在Eclipse中使用Scala时遇到了同样的问题,但下面的解决方案都是针对Java的,因为Scala代码格式化选项卡有不同的选项。有没有办法关闭Scala的注释重新格式化? - Glenn Strycker
11个回答

194

以前从未见过,即使超出了上下文。+1! - Pops
18
遗憾的是,这只适用于“常规”块注释,而不适用于Javadoc注释。 - Pops
非常适合版本:Juno Service Release 1。谢谢你,我的救星! - Hong
1
即使您拥有自己的格式化程序,该程序会在每行开头添加星号,并且您不希望默认格式化程序这样做时,使用/-....../也非常有用。 - Shiva Komuravelly
仍然适用于2020年(版本:2020-06(4.16.0)):-)非常好。 - rustyx

41

更新于2010年,正如提问者所指出此答案中所述,Eclipse 3.6 中特殊的字符串// @formatter:off已经足够使用。

在该问题发布时它尚未可用


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

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

在注释选项卡(eclipse3.5中),您可以确保在“Javadoc注释设置”中取消选中“格式化HTML标签”。
还要在“常规设置”中选择“不要连接行”。

然后您的注释应该这样写:

/**
 * 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标签<dl><dt><dd>将有助于在Javadoc视图中正确呈现它。


1
对我来说,这个答案中相关的部分是HTML标签不会自动插入换行符等。对大多数人来说可能很明显,但我直到在这里看到它之前才意识到我必须手动编写像<br>这样的东西。 - Pops
@Lord Torgamus:你不仅需要添加这些标签,而且在<br />之前,第一句话需要一个句号和一个空格!(请参见http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4165985) - VonC
我在Eclipse中使用Scala时遇到了同样的问题,但下面的解决方案都是针对Java的,因为Scala代码格式化选项却有不同。是否有办法关闭Scala的注释重新格式化? - Glenn Strycker
1
这是一条反馈信息,您需要提供原始文本以便我可以进行翻译。 - Enerccio

29

我刚从同事那里了解到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

请注意,您可能需要通过首选项菜单→Java>代码样式>格式化程序手动启用此功能,单击“编辑”,选择“关闭/打开标记”选项卡并勾选“启用关闭/打开标记” (来源)。
通过快速搜索字符串@formatter:off,我找到了这个 SO 答案,它提到了在禁用代码块的格式化程序时使用此功能。我已确认它也适用于行注释、“正常”的块注释和 Javadoc 块注释。

你是怎么让它适用于JavaDoc注释的?我发现我必须在JavaDoc注释之前和之后加上行注释才能使其起作用,就像你在这个答案中对块注释所做的那样。我希望我可以只针对JavaDoc注释的某个部分关闭格式化。 - Michael Scheper
@MichaelScheper 好久不见了,我记不太清了... 你试过VonC的建议了吗? - Pops
这很棒,因为它告诉Eclipse不要格式化代码。当您想保留自己的格式时非常有用。 - Martin Wickman

20

另一个可能性是在Javadoc中使用HTML的<pre>:

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

至少这是我在源代码注释中嵌入ASCII艺术的方法 :)


2
请注意,如果Eclipse将<pre></pre>标签中的内容视为Java代码(除非您取消选中Window->Preferences->Java->Code Style->Formatter->Edit...[Button]->Comments[Tab]->"Format Java code snippets inside 'pre' tags"),它将格式化该内容。 - gswierczynski

9

请使用<pre> </pre>标签将特定文本包围起来。


3
尝试这个。这对我有用。通过Java格式化程序(Windows > 首选项 > Java > 代码风格 > 格式化程序),您可以从现有的创建一个新的格式化程序配置文件,然后进行编辑。如果Eclipse不允许保存此内容,则创建一个新的并将其保存在其中。输入图像描述

这是最新Eclipse的答案:您现在可以禁用任何注释格式(javadoc、块或行内)。 - Tristan

2

一个解决方法是为不想让Eclipse格式化的注释添加pre标签。

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

2
是的...但我不明白这对于Philip或Thomas Keller多年前已经说过的内容有什么补充。 - Pops

2
在Eclipse 3.4中,进入首选项,选择Java->代码风格->格式化程序,然后编辑配置文件,找到注释标签页,这里有很多选项可用于控制注释的格式。

1
如果你想在Eclipse中禁止格式化,你可以将不需要格式化的内容用<pre>UNFORMATTED CONTENT</pre>标签包裹起来。 Javadoc格式化程序会检测到该标签,并将标签之间的所有内容保持未格式化状态。
优点:
  • 其余的Javadoc仍然被格式化
  • Javadoc的HTML输出也将因为pre标签而变成“未格式化”
缺点:
  • 没有发现明显的缺点

0

这是与语言相关的。

例如,如果使用javascript,您可以转到“Window -> Preferences -> Javascript -> Code Style -> Formatter”,然后编辑格式选项。

编辑(反映OP问题中的更改)

要编辑java代码格式,请转到“Window -> Preferences -> Java -> Code Style -> Formatter”

在面板顶部,您将看到

活动配置文件:
Eclipse [内置]

从那里,您有一个按钮在右边,“编辑”,两个按钮在下面,“新建...”和“导入...”。我建议编辑现有配置文件。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接