【问题标题】:Stop spacebar keypress from triggering autocomplete in Eclipse停止空格键按键在 Eclipse 中触发自动完成
【发布时间】:2012-12-27 04:34:16
【问题描述】:

更新

此问题已在 Eclipse 2018-12 中修复。此行为仍然是默认行为,但可以配置为关闭 - 请参阅 the accepted answer 了解如何

我将把这个问题留给后代,以及早期版本的 Eclipse 上的问题


在 Eclipse 中,我通过转到

为 Java 启用了智能感知风格的建议
Window -> Preferences -> Java/Editor/Content Assist

并设置以下内容

Auto activation delay (ms) -> 0
Auto activation triggers for Java -> .(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

来源 = Eclipse Intellisense?

除了一个烦人的问题之外,这非常有效。当我点击 spacebar 时,正在键入的标记会自动完成,其中包含建议列表顶部的任何内容。很公平,除了有时我会键入一个完全合法匹配的类/变量名称,但这个不会显示为最重要的建议。所以当我自然地点击 spacebar 时,Eclipse 会插入一些完全错误的东西。

E.G. 在输入 Cookie 后我会按 空格键 并得到 CookieMonster

这似乎是一个错误,并且经常发生以至于令人讨厌,但尽管如此我不希望 空格键 通常触发自动完成。我可能想输入一个尚未声明的变量名,或类似的东西。我想使用自动完成作为辅助工具,但我的自然输入应该始终优先于它。

我想停止 空格键 触发自动完成,并且要么退回使用 enter,或者更好地使用 custom 触发自动完成普通打字中不使用的键。 这有可能吗?

我尝试了 Content Assist 中的所有设置,但无济于事。谷歌搜索这个问题只会返回一堆关于禁用自动完成功能的结果。


此问题已从 Eclipse 2018-12 [4.10] 中修复,请参阅 the accepted answer

它存在于所有以前的版本中,即 2018-09 [4.9]、Photon [4.8]、Oxygen [4.7]、霓虹灯 [4.6]等。

【问题讨论】:

  • +1 我只是在与同样的问题作斗争......解决这个问题有什么运气吗?按下空格并得到你不想要的东西(你没有选择它!)非常烦人......这对于“类型声明”可能有好处,但对于“变量名”是不合理的。
  • 很遗憾没有。不知道最新版本的开普勒(4.3)是否存在同样的问题?我还没有升级,但如果是这样,我会更新问题
  • 不幸的是,同样的行为也发生在开普勒(4.3)中......这真的很遗憾。我非常喜欢自动激活,但在几种情况下进行这样的选择真的很烦人。我的临时解决方案是稍微增加激活时间,以便我编写大部分新变量名......但这并不总是有效。我会进一步研究这个问题,并且可能会向 Eclipse 报告这个问题,因为我确实认为这是一个错误而不是一个特性。
  • stackoverflow.com/questions/7371618/… 的可能重复项(表明 Indigo 也已经这样做了)
  • 从这个问题的赞成票数和答案的反对票数来看,Eclipse 似乎需要解决这个问题!

标签: java eclipse


【解决方案1】:

Eclipse 2018-12 已经为此打了补丁!

Bug 348857 的补丁最近被合并到 Eclipse 项目中,并作为 Eclipse 2018-12 的一部分发布。你可以下载那个版本here

您现在有一个新选项可以禁用除 enter 之外的所有插入触发器,这将防止 空格键 导致自动完成。

只需转到 Preferences... -> Java -> Editor -> Content Assist(或窗口 -> 首选项 -> Java -> 编辑器 -> 内容辅助 on Windows)并选择Disable insert triggers except 'Enter',如下面的截图所示:

【讨论】:

  • 太好了,非常感谢。我在您的答案中添加了标题,以便人们清楚地看到它适用于当前版本。其他答案已过时。
  • @Pyves 我花了一段时间才接受这个较新的答案,抱歉,但我不再使用 Eclipse,也没有来验证它。无论如何,是的,这看起来确实解决了问题,我真的很高兴它 解决了 6 年多!
  • 有人遇到问题,即触发器抑制在调试外壳视图中不起作用?对我来说,空格键正在触发自动完成。 (我是 2019 年 6 月)
  • @William Dutton 可能需要在单独的错误报告中进行标记。
【解决方案2】:

对此有解决方案on the issue tracker。 复制 eclipse/dropins 文件夹中的 jar。随着下一次重新启动,空间被禁用为自动完成触发器。

https://bugs.eclipse.org/bugs/show_bug.cgi?id=348857

Eclipse 12-2018 及更高版本:这是本机工作,请查看 Pyves 答案。

【讨论】:

  • 看起来棒极了,但是.. 它在 Eclipse Juno 中对我不起作用——行为没有改变,空格键仍然激活自动完成。这对你在开普勒有用吗?用于切换错误线程中提到的工具的工具栏按钮/菜单项在哪里?
  • 是的,在 Kepler Service Release 1 中对我有用。但是我也看不到工具栏项。
  • 这对我在 Eclipse Luna SR2 (4.4.2 -- Build Id: 20150219-0600) 中不起作用。
  • 我刚刚快速创建了一个插件(在@AndrewXu 关于编写插件的回答中),它将 Eclipse Luna 中的行为更改为仅接受 Tab 和 Enter 作为智能感知完成键。
  • @Pascalius 感谢您的回答,长期以来这是最好的回答,但现在 Eclipse 已修复此问题并使其可本地配置。较新的答案中指出了这一点,因此我接受了该答案,因为它现在是解决问题的最佳方法。
【解决方案3】:

使用 SDK 版本的 eclipse

1.打开Plug-ins View,找到org.eclipse.jface.text,右键,选择import as Source Project。导入后,您可以在工作区中找到它。

2.在src/org/eclipse/jface/text/contentassist/CompletionProposalPopup.java

char[] triggers = t.getTriggerCharacter();
if(contains(triggers,key))

改成

if(key!='='&&key!=0x20&&contains(triggers,key))

3.导出org.eclipse.jface.text

右键org.eclipse.jface.text的项目文件夹,选择export-->Deployable plugins and Fragments,下一步,destination选择archive file,完成。将 eclipse/plugins 中的替换为你生成的那个。

【讨论】:

  • 对于那些想知道如何打开此视图的人,请转到“窗口”->“显示视图”->“其他...”,然后在过滤器文本框中输入“plug”,然后选择从下面的框中“插件”,然后按“确定”。
  • 另外,如果您正在寻找更像 Visual Studio 的体验,我建议您完全注释掉该块(默认块),注释掉 '\t' 块,然后找到处理 '\r' 和 '\n' (就在这两个之上)的块,并添加 '\t' 到它。 -- 这会给你标签完成。 :-)
  • (对于那些不想经历所有这些麻烦的人,这是我的 Eclipse Luna SR2 4.4.2 的 64 位版本:1drv.ms/1GZhJPq——记住我所做的更改上面提到的。)
  • @BrainSlugs83 如果可以 a) 将代码发布到 github 或 b) 添加“。”到完成触发器,那太棒了。
  • 你为什么用0x20而不是' '
【解决方案4】:

即使在 Indigo 中,空格键也是选择自动完成的关键。据我所知,这是无法配置的。 事实上,这可能就是延迟存在的原因。

我建议将延迟设置为某个最佳值,这样您就可以轻松地键入private void ... 之类的内容,而不会触发privatevoid 的建议。然后,如果您因为等待太久而收到建议,请按 Escape 中止 Content Assist。

【讨论】:

  • 我在增加延迟方面只取得了有限的成功。
【解决方案5】:

与 davnicwil 相同的配置,相同的问题,仍在 eclipse 4.4 上。

解决方案:在(编辑器窗口)eclipse 上截取(挂钩)SHIFT+SPACE(按住)并将其替换为 ESC、SPACE(序列)。现在你来决定

  • 自动完成+空格:出现自动建议时按空格
  • 只需空格:按预定义的组合键或顺序(例如 SHIFT+SPACE)

在windows上你可以使用http://www.heise.de/download/activaid.html(你也可以使用AutoHotkey, java native hook, ...)

如何使用 ActivAid:

  1. 打开Ac'tivAid,选择“UserHotkeys”
  2. 点击“+”,设置描述
  3. 点击“快捷方式”,按例如SHIFT+空格
  4. 命令:“{ESC}{SPACE}”(不带引号)
  5. 点击“+”,选择eclipse编辑器框架,回车
  6. 在 ActivAid 中单击确定、确定

我的配置文件:activAid/settings/ac'tivAid.ini:[UserHotkeys]

Hotkey11=+Space
Path11=<Send>{ESC}{SPACE}
Description11=Eclipse Shift+Space -> Esc,Space
Category11=
Application11=ahk_class SWT_Window0

您还可以使用“HotStrings”重新映射非英语键盘上的键,例如ö->{,ä->} 等

【讨论】:

    【解决方案6】:

    终于解决了。

    尝试下载此org.eclipse.jface.text.jar 并将其复制到您的插件文件夹(通常为 eclipse/plugin)。不要忘记备份自己的。

    适用于 Eclipse Juno。

    如果链接失效,请评论,谢谢。

    【讨论】:

    • MARS1 Eclipse 无法启动,java.lang.RuntimeException:在注册表中找不到应用程序“org.eclipse.ui.ide.workbench”。
    【解决方案7】:

    在 Eclipse 中,转到 Window -> Preferences -> General -> Keys 并删除命令 Content Assist 的绑定。

    【讨论】:

    • 这将消除使用 ctrl+Space 提出建议的可能性。 OP 想要的是一种使用空格键禁用建议选择的方法。不存在为此的键绑定。
    【解决方案8】:

    您可以通过复选框禁用自动激活

    Window -> Preferences -> Java/Editor/Content Assist
    

    并按需激活自动完成功能。默认热键是

    CTRL+空格

    【讨论】:

    • 整个问题是我想要自动激活行为,只是没有空格键自动完成
    猜你喜欢
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 2014-04-30
    相关资源
    最近更新 更多