如何防止 Eclipse 格式化程序弄乱带有文本符号的注释?
Posted
技术标签:
【中文标题】如何防止 Eclipse 格式化程序弄乱带有文本符号的注释?【英文标题】:How to prevent Eclipse formatter from messing up text-bulleted comments? 【发布时间】:2012-09-16 16:50:38 【问题描述】:我有 (Java) cmets,例如:
/*
* The quick brown fox jumped over the lazy dog.
*
*
* Notes:
* - The quick brown fox jumped over the lazy dog. The quick brown fox
* jumped over the lazy dog. The quick brown fox jumped over the lazy
* dog.
* - The second quick brown fox jumped over the lazy dog. The quick brown
* jumped over the lazy dog. The quick brown fox jumped over the lazy
* dog.
*/
Eclipse 自动格式化程序会正确设置注释行宽,但会这样做:
/*
* The quick brown fox jumped over the lazy dog.
*
*
* Notes: - The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy
* dog. The quick brown fox jumped over the lazy dog. - The second quick brown fox jumped over the
* lazy dog. The quick brown jumped over the lazy dog. The quick brown fox jumped over the lazy dog.
*/
代码格式化程序如何让项目符号列表保持原样,同时仍处理注释?
注意事项:
我不想关闭 cmets 中的行连接,因为我确实希望我的注释行适合最大长度。因此,关闭线路连接、关闭 Javadoc cmets 的格式化、或暂时暂停自动格式化,都是不可接受的解决方案。 Possibly related question。【问题讨论】:
我在 Eclipse 中遇到了与 Scala 相同的问题,但以下解决方案是特定于 Java 的,因为 Scala 代码格式化程序选项卡有不同的选项。有没有办法关闭 Scala 的注释重新格式化? @GlennStrycker:好吧,既然没有人给我一个可以接受的答案,我们现在几乎在同一条船上:-( 【参考方案1】:你的问题的答案可能和这里一样:How to turn off the Eclipse code formatter for certain sections of Java code?
从 Eclipse 3.6 开始,您可以使用
// @formatter:off
...
// @formatter:on
用于禁用代码格式化的注释。
更新:
或者,您也可以更改首选项中的注释设置:在 Java/代码样式/格式化程序中编辑格式化程序设置,并检查注释页面以获取以下设置:
启用 Javadoc 格式设置(常规设置) 缩进 Javadoc 标签(Javadoc 设置)顺便说一句,这种手动列表不会在生成的代码中转换为列表。出于这个原因,使用 html 列表可能是有意义的。
【讨论】:
嗯,这就是我指定的那种对我来说不是解决方案。我不想那样弄脏我的文件,也不想在每个这样的评论中添加两行... 我更新了我的答案以提供一些替代方案(例如禁用整个 Javadoc 格式)。 您能解释一下“缩进 Javadoc 标签”如何帮助我吗? 我不确定,但我希望如果关闭它不会改变换行符/缩进。如果没有,那么再次抱歉建议一些不起作用的东西。遗憾的是,唯一万无一失的解决方案是定义 HTML 列表。它们可以工作,但在 Java 源代码中不太容易阅读。【参考方案2】:您可以更改 Eclipse 格式化 cmets 的方式并对块 cmets 进行特殊处理。
转到窗口 -> 首选项。 Java > 代码风格 > 格式化程序。单击“新建”以创建新模板。然后在“评论”选项卡下禁用块评论格式。
然而,这将永远不会对块 cmets 执行任何格式化。
【讨论】:
重点是我确实想要块注释格式。我只是不希望它弄乱我的 cmets 的这些部分。【参考方案3】:在 Java 中有 2 种不同的 cmets:
block cmets:它们没有标准格式,因此 格式类似于浮动文本。 JavaDoc comments: 那些有 通用结构,其格式取决于布局标签(如<br>
或<p>
)
在评论中使用。
在 JavaDoc 中,您的示例可以如下编写(并且格式如下所示):
/**
* The quick brown fox jumped over the lazy dog.
*
* <p>
* Notes:
* <ul>
* <li>The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog. The quick brown
* fox jumped over the lazy dog.</li>
* <li>The second quick brown fox jumped over the lazy dog. The quick brown jumped over the lazy dog. The quick
* brown fox jumped over the lazy dog.</li>
* </ul>
* </p>
*/
【讨论】:
嗯,你是对也是错。我们还没有编译 Javadoc(在我的团队项目中),我正在尝试采用它。所以对于初学者,我没有使用 HTML 标记。但是假设我这样做了,并且在我的Notes:
之后有一个<br>
,并且有一个<li>
而不是` - ` - 我仍然会遇到同样的问题。对吗?
如果您以/**
(2 颗星!)开始评论,那么 Eclipse 会将其识别为 JavaDoc,并根据标签对其进行格式化。然后,您可以使用Notes<ul><li>Item1</li><li>Item2</li></ul>
作为列表,它将像子弹列表一样在 Eclipse 悬停中呈现。在源代码中,它将用换行符进行格式化,但不可否认,它仍然不像您自己的格式那样可读。
即使我将其设为常规评论 (/**
),我仍然会得到相同的行为。
输入这个并运行格式化程序。它将格式化为带有项目符号列表的单独段落。 /** headline<p>Notes:<ul><li>item1</li><li>item2</li></ul></p>*/
【参考方案4】:
This answer 表示您在开头/*
之后添加一个连字符,即:
/*-
* The quick brown fox jumped over the lazy dog.
*
*
* Notes:
* - The quick brown fox jumped over the lazy dog. The quick brown fox
* jumped over the lazy dog. The quick brown fox jumped over the lazy
* dog.
* - The second quick brown fox jumped over the lazy dog. The quick brown
* jumped over the lazy dog. The quick brown fox jumped over the lazy
* dog.
*/
这对我也有用。
【讨论】:
但我确实想要自动格式化;我也需要它来为 JavaDoc cmets 工作。 XML/HTML 文件怎么样【参考方案5】:根据 Bananeweizen 所说,您还可以使用 <pre></pre>
标签包装相关评论块,将每个选项卡和空格保留在其位置:
/*
* The quick brown fox jumped over the lazy dog.
*
*
*<pre>Notes:
* - The quick brown fox jumped over the lazy dog. The quick brown fox
* jumped over the lazy dog. The quick brown fox jumped over the lazy
* dog.
* - The second quick brown fox jumped over the lazy dog. The quick brown
* jumped over the lazy dog. The quick brown fox jumped over the lazy
* dog.</pre>
*/
【讨论】:
这将阻止 Eclipse 格式化程序对这些 cmets 应用适当的线宽... 注意,有一个偏好来切换 Eclipse 是否会格式化标记的内容。我在 Eclipse Neon (Mac) 上,首选项位于“Java | Code Style | Formatter”下。在那里,编辑活动配置文件,然后选择“评论”选项卡。如果要防止这种格式设置,请确保未选中“在 'pre' 标记内格式化 Java 代码 sn-ps”。【参考方案6】:
怎么样:
/**
* The quick brown fox jumped over the lazy dog.
*
* <p>Notes:
* <li>The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog.</li>
* <li>The second quick brown fox jumped over the lazy dog. The quick brown jumped over the lazy dog. The quick brown fox jumped over the lazy dog.</li>
*/
然后在 Windows -> Preferences -> Java -> Code Style -> Formatter -> Edit... -> Comments 中打开“Format HTML tags”
这仍然会使线宽换行。
编辑:
我使用了以下块注释:
/*
* The quick brown fox jumped over the lazy dog.
*
* Notes:
* - The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog.
* - The second quick brown fox jumped over the lazy dog. The quick brown jumped over the lazy dog. The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog.
*/
我正在为 Java EE 使用 Eclipse Neon.3,我的 Formatter cor cmets 设置为 150 的宽度,并选择了“从不加入行”。 格式化此块注释会给我以下结果,我认为这是您可能想要的(尽管我知道您不想“从不加入行”)。
/*
* The quick brown fox jumped over the lazy dog.
*
* Notes:
* - The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog. The
* quick brown fox jumped over the lazy dog.
* - The second quick brown fox jumped over the lazy dog. The quick brown jumped over the lazy dog. The quick brown fox jumped over the lazy dog.
* The quick brown fox jumped over the lazy dog.
*/
只有 1 个小问题。当我在第一个项目符号列表中添加更多文本然后再次格式化时,我得到以下结果。
/*
* The quick brown fox jumped over the lazy dog.
*
* Notes:
* - The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog. The
* SOME MORE TEXT TO WRAP
* quick brown fox jumped over the lazy dog.
* - The second quick brown fox jumped over the lazy dog. The quick brown jumped over the lazy dog. The quick brown fox jumped over the lazy dog.
* The quick brown fox jumped over the lazy dog.
*/
那是因为我告诉格式化程序“不要加入行”。当我取消选择“从不加入行”时,我显然会得到与您相同的结果。
【讨论】:
这不是一件坏事,但不是我问的……我说的是现有代码,现有 cmets,文本项目符号,没有 html 标签。 对不起。因此,您需要将“-”识别为项目符号列表指示符的东西。我不认为 eclipse 格式化程序可以开箱即用。 是的,好像是这样。但是这个问题上的 5 颗星表明很多人希望它是...... 您可以这样做:github.com/google/google-java-format,然后根据您的需要进行修改。虽然我还没试过。【参考方案7】:具体来说,你要设置:
org.eclipse.jdt.core.formatter.comment.format_block_comments=false
这可以在 Eclipse 设置中的某处访问,对于 VS Code,在项目的根目录中,您需要一个 .settings 目录,其中包含包含该行的“org.eclipse.jdt.core.prefs”文件。该文件将包含 VS 代码利用的所有 Eclipse 设置。此设置同样适用于使用 Eclipse 设置的其他编辑器。
【讨论】:
这将禁用所有块注释格式——我已经指出这不是我想要的。请删除答案。【参考方案8】:我知道这个问题很老,但我也看到没有人给出满意的答案。
这解决了我的问题。
转到Preference->Java->Code Style->Formatter
。在这里,转到您正在使用的任何格式化程序样式的编辑。在编辑对话框中,您将找到一个复选框启用块注释格式。取消选中此项。像我一样更改个人资料名称。申请并确定。你已经完成了。
请参考下图。
希望对您有所帮助。
【讨论】:
为我工作,正是我想要的,更改=1:取消选中“启用块评论格式”和 2:配置文件名称(如果它不允许内置)以上是关于如何防止 Eclipse 格式化程序弄乱带有文本符号的注释?的主要内容,如果未能解决你的问题,请参考以下文章
IE 10, 11. 如何防止使用占位符的文本输入触发焦点输入事件?