6

我很难让我的 JavaScript 很好地格式化日食。在第一个示例中,它的行为符合预期(不是第二个 url 的长度):

表现良好

每当我有一个较长的 url 时,eclipse 就会疯狂地格式化我的代码,并且到处都有额外的填充,如下例所示:

表现不好

为什么 JavaScript 格式化程序会有这样的行为,我该如何解决?

(以防万一:我没有安装任何格式化插件,我只是使用 Eclipse Juno 自带的默认插件)

4

4 回答 4

12

该问题可以通过访问解决

Preferences > JavaScript > Code Style > Formatter

这些是步骤:

  1. 创建一个新配置文件(因为您无法编辑内置配置文件),如果您还没有,然后单击Edit...
  2. 打开Line Wrapping选项卡。
  3. 在该Maximum line width字段中,输入9999
  4. 单击ApplyOk

对于超过 9999 个字符的代码行,问题再次出现,但我可以忍受。

于 2013-04-24T08:32:19.397 回答
10

示例中的长 url 会影响 "$.ajax(..." 和 "$(function()..."。

至于“$(function()...”,设置在 Preferences/JavaScript/Code Style/Formatter/Line Wrapping/Function Calls/Arguments. 'Do not wrap' 可用。

至于“$.ajax(...”,它类似于 Java 格式化程序中的“合格调用”。(Preferences/Java/Code Style/Formatter/Line Wrapping/Function Calls) 不幸的是,JSDT 没有这方面的 UI。 (首选项/JavaScript/代码样式/格式化程序/换行/函数调用)

这是 JSDT 1.4.1(WTP R3.4.1) 的一个技巧。

  1. 启动 Eclipse
  2. 打开首选项/JavaScript/代码样式/格式化程序
  3. 点击“新建”
  4. 根据需要输入配置文件名称,在列表框中选择'Eclipse [built-in]'(或JavaScript Conventions),取消选中'Open the edit dialog now'(无需编辑),然后单击'OK'
  5. 关闭首选项并退出 Eclipse
  6. 使用文本编辑器打开以下文件
    workspace/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.jsdt.core.prefs
  7. 找到以下行并将 16 替换为 0
    org.eclipse.wst.jsdt.core.formatter.alignment_for_selector_in_method_invocation=16
  8. 保存
  9. 启动 Eclipse

(因为你有自己的个人资料,也许 1-5 是不必要的)

当您在首选项中编辑格式化程序设置时,此 hack 将被恢复。- (为防止覆盖,您需要做的就是导出格式化程序配置文件,编辑 XML 并将 'org.eclipse.wst.jsdt.core.formatter.alignment_for_selector_in_method_invocation' 更改为 0。现在再次保存并重新导入。此更改是永恒的。

我认为这不能满足您的需求,我猜最好使用其他格式化程序(第 3 方插件)。

于 2013-03-02T03:26:53.553 回答
2

我找到了一个临时解决方案:

  1. Window -> Preferences -> JavaScript -> Code Style -> Formatter

  2. 将活动配置文件设置为 JavaScript 约定。

  3. 点击Edit

  4. Indentation选项卡中,设置Tab policySpaces only

  5. Indentation size和都设置Tab size3

  6. 由于您无法覆盖默认配置文件,请更改配置文件名称并保存。

  7. Ctrl+ Shift+F并享受。

注意:我不喜欢有 3 个空格,我更喜欢我的旧 4 个空格,但这是一个临时解决方案,直到有人找到更好的方法来解决这个问题。我只是想分享。

于 2013-03-01T23:41:22.240 回答
1

这是我发现的:在“换行>函数调用”中,将底部的“缩进策略”设置为“缩进一个”。这会创建没有过多空格(或制表符)的缩进。我没有用你的确切代码尝试过,但我也看到过类似的问题。

于 2018-04-26T15:27:14.657 回答