Eclipse 格式化程序没有正确缩进

Posted

技术标签:

【中文标题】Eclipse 格式化程序没有正确缩进【英文标题】:Eclipse Formatter isn't indenting correctly 【发布时间】:2020-01-18 07:44:25 【问题描述】:

我们正在为我们的Eclipse 项目使用Java Conventions [built-in] 格式化程序。在Eclipse 中查看代码后,代码在格式化和缩进后看起来与预期一样。

我们注意到,如果我们在Notepad++(或其他应用程序)中打开文件,缩进实际上是不正确的。例如。方法体与方法具有相同的缩进。 此外,如果代码是从Eclipse 复制的,则缩进不正确。

示例 1

Eclipse

class Example 

    public static void main(String args[]) 
        System.out.println("Hello World!");
    

Notepad++

class Example 

public static void main(String args[]) 
    System.out.println("Hello World!");


示例 2

Eclipse

public static void main(String args[]) 
    System.out.println("Hello World!");

Notepad++

public static void main(String args[]) 
System.out.println("Hello World!");

这是预期的行为吗?

空格/制表符的屏幕截图

所有字符

【问题讨论】:

我的猜测:在 Eclipse 中,您使用的是 tabs i.o。缩进的空格(不是真正的约定)。而在 Notepad++ 中,选项卡设置设置为 0 个空格,对于 java 应该是 4。 (记事本++:查看|显示符号|显示空白和制表符。) @deHaar Re “此问题与编程问题没有直接关系”,问题有效且切题,还有数千个关于格式问题的 SO 问题在 IDE 中! What topics can I ask about here? 明确解决了这一点:“如果您的问题通常涵盖……软件开发独有的实际、可回答的问题……那么您来对地方提出问题了!”。问题不应仅仅因为它们不“与编程问题直接相关”而被否决。赞成。 @deHaar eclipse-formatter 标签的存在(用于这个问题)也表明这个问题是 SO 的主题。 @deHaar 不用担心。看到一个有效的、很好的和有用的问题被否决真是令人沮丧,我认为这是由于对 SO 上有效问题的构成存在误解。 @skomisa 我没有投反对票,但也许我的评论让人们这样做了,这不是我的意图...... 【参考方案1】:

默认的 Eclipse 格式化程序配置文件,Eclipse [Built-in],显示 选项卡宽度为 4 个空格强>。

相比之下,Java Conventions [Built-in] 显示 选项卡宽度为 8 个空格.

这是由Code Conventions for the Java Programming Language、4 - Indentation 给出的如下(由我突出显示):

四个空格应该作为缩进的单位。最正确 缩进的构造(空格与制表符)未指定。 标签 必须每 8 个空格(不是 4 个)准确设置一次。

如今,很少使用带有混合制表策略和制表宽度为 8 个空格的原始 Java 代码约定。您可以考虑切换到 Eclipse [Built-in] 格式化程序配置文件。

【讨论】:

【参考方案2】:

Java Conventions [Built-in] 配置文件使用 8 个空格作为制表符。

Notepad 使用 8 个空格,但 Notepad++(以及我使用过的大多数其他 IDE,例如 IntelliJ)使用 4 个空格。

要修复此问题,请复制配置文件并将制表符间距更改为 4

或者,Tab Policy 可以更改为 Spaces Only。我更喜欢这个,因为我不觉得制表符应该用于间距。这个问题是为什么不应该使用制表符的一个例子。

【讨论】:

以上是关于Eclipse 格式化程序没有正确缩进的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Eclipse 格式化程序中为二进制操作保留自定义缩进

如何让 Eclipse 正确格式化 JSP 代码?

如何正确格式化项目符号和缩进 - Powerpoint VBA

在 Eclipse 中缩进 python 文件(使用 pydev)

Eclipse 代码样式格式化程序可以对齐赋值语句吗?

C# 正确格式化(缩进、对齐)C#