停止空格键按键触发Eclipse中的自动完成


86

更新资料

Eclipse 2018-12中已修复此问题。此行为仍然是默认行为,但可以配置为关闭-有关如何操作,请参见已接受的答案

我将保留这个问题,因为它是后代的,以及在早期版本的Eclipse中的那些。


在Eclipse中,我通过以下方式为Java启用了智能感知风格的建议:

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

并设置以下内容

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

来源= Eclipse Intellisense?

除了一个烦人的问题之外,这非常出色。当我点击时spacebar,输入的令牌将自动完成,并显示在建议列表顶部。相当公平,只是有时我会键入一个具有完全合法匹配项的类/变量名,但这并不是最重要的建议。因此,当我自然命中spacebarEclipse时,就会插入完全错误的内容。

键入EG之后,Cookie我会击中spacebar得到CookieMonster

这似乎是一个错误,并且经常会令人讨厌,但是尽管如此,我还是不想spacebar触发自动完成功能。我可能想输入一个尚未声明的变量名,或类似的名称。我想将自动完成功能用作帮助工具,但我的自然输入应始终优先于此。

我想停止spacebar触发自动完成功能,或者退回到using enter,或者最好还是custom使用普通键入中未使用的键来触发自动完成功能。这有可能吗?

我没有使用Content Assist中的所有设置。谷歌搜索问题只会返回有关禁用自动完成功能的大量结果。


此问题已从Eclipse 2018-12 [4.10]中修复,请参见接受的答案

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


+1我只是在同一个问题作斗争...解决这个问题有运气吗?按下空格并获得您不想要的内容(您没有选择它!)...这很烦人。这可能对“类型声明”很有用,但对“变量名”来说却不合理。
emgsilva

不幸的是没有。您知道最新版本的开普勒(4.3)中是否存在相同的问题?我尚未升级,但如果是的话,我将更新问题
davnicwil

3
不幸的是,开普勒(4.3)中也发生了同样的行为。我非常喜欢自动激活,但是在几种情况下进行这样的选择确实很烦人。我的临时解决方案是略微增加激活时间,以便我编写大多数新变量名……但这并不总是有效。我将对此问题做进一步研究,并可能将其报告给Eclipse,因为我确实认为这是一个bug,而不是功能。
emgsilva

可能是stackoverflow.com/questions/7371618/…的重复项 (表明Indigo也已经表现得如此)
herman 2013年

6
从对这个问题的赞成票数以及对答案的反对票数来看,Eclipse似乎需要解决此问题!
andrewb 2014年

Answers:


20

Eclipse 2018-12已经为此进行了修补!

Bug 348857的补丁最近被合并到Eclipse项目中,并作为Eclipse 2018-12的一部分发布。您可以在此处下载该版本。

现在,您有了一个新选项来禁用除以外的所有插入触发器enter,这将防止spacebar引起自动补全。

只需转到首选项...- > Java- >编辑器-> Content Assist(或Windows- >首选项-> Java- >编辑器-> Content Assist,在Windows上),然后选择禁用除'Enter'之外的插入触发器,如屏幕截图如下: 禁用插入触发首选项


1
太好了,非常感谢。我在您的答案中添加了标题,以便人们清楚地看到它是针对当前版本的。其他答案已过时。
callmebob

1
@Pyves我花了一些时间来接受这个较新的答案,对不起,但是我不再使用Eclipse,也没有去验证它。无论如何,是的,这看起来像是可以彻底解决问题的方法,我很高兴它已经解决了6年以上!
davnicwil

是否有人在Debug Shell视图中无法使用触发抑制的问题?对我来说,空格键会触发自动完成功能。(我在2019年6月)
William Dutton

@William Dutton可能需要在单独的错误报告中进行标记。
Pyves

26

在问题跟踪器上有一个解决方案。将jar复制到eclipse / dropins文件夹中。在下次重启时,可以将空间用作自动完成触发器。

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

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


2
看起来很棒,但是..在Eclipse Juno中对我不起作用-行为没有改变,空格键仍会激活自动完成功能。这在开普勒为您工作吗?错误线程中提到的用于切换工具的工具栏按钮/菜单项在哪里?
davnicwil

1
是的,在Kepler Service Release 1中对我有用。但是,我也看不到任何工具栏项。
Pascalius

在Eclipse Luna SR2(4.4.2-Build ID:20150219-0600)中,这对我不起作用。
BrainSlugs83 2015年

我只是快速整理了一个插件(在@AndrewXu关于编写插件的答案中),该插件将Eclipse Luna中的行为更改为仅接受Tab和Enter作为智能感知完成键。
BrainSlugs83 2015年

1
@Pascalius感谢您的回答,长期以来,这是最好的回答,但是现在Eclipse已修复此问题,并使它可以本地配置。这是在较新的答案中指出的,因此我已经接受了它,因为它现在是解决问题的最佳方法。
davnicwil

7

使用eclipse的SDK版本

1.打开插件视图,找到org.eclipse.jface.text,右键单击,选择导入为源项目。导入后,您可以在工作区中找到它。

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->可部署的插件和片段,然后,目标位置选择存档文件,完成。将eclipse / plugins中的一个替换为您生成的一个。


2
对于那些想知道如何打开此视图的人,请转到“窗口”->“显示视图”->“其他...”,然后在过滤器文本框中开始键入“ plug”,然后从框中选择“ Plug-ins”然后点击“确定”。
BrainSlugs83 2015年

另外,如果您正在寻找更像Visual Studio的体验,我建议您完全注释掉该块(默认块),注释掉'\ t'块,然后找到处理'\ r'和'\ n'(在这两个上方),并添加'\ t'。-这将使您完成制表符。:-)
BrainSlugs83 2015年

(对于那些不想经历所有麻烦的人,这里是Eclipse Luna SR2 4.4.2的64位版本的矿:1drv.ms/1GZhJPq-请记住我上面提到的更改。)
BrainSlugs83

@ BrainSlugs83如果可以a)将代码发布到github或b)添加“”。完成触发器,那将是非常棒的。
lakemalcom 2015年

为什么用0x20代替' '
基金莫妮卡的诉讼

3

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

我建议将延迟设置为某个最佳值,使您可以private void ...舒适地键入类似内容,而不会触发针对private和的建议void。然后,如果由于等待时间太长而收到建议,请按Escape键放弃Content Assist。


由于增加延迟,我的成功有限。
2013年

0

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

解决方案:在(编辑器窗口)日食上截获(钩)SHIFT + SPACE(按住),并用ESC,SPACE(顺序)替换。现在你我决定

  • 自动完成+空格键:存在自动提示功能时按空格键
  • 仅空格键:按预定义的组合键或顺序(例如SHIFT + SPACE)

在Windows上,您可以使用http://www.heise.de/download/activaid.html(也可以使用AutoHotkey,java本机钩子,...)

如何使用ActivAid:

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

我的配置文件: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”重新映射非英语键盘上的键,例如ö-> {,ä->}等。


0

终于解决了。

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

在Eclipse Juno上工作。

如果该链接无效,请对此发表评论,谢谢。


MARS1 Eclipse无法启动,java.lang.RuntimeException:在注册表中找不到应用程序“ org.eclipse.ui.ide.workbench”。
蒂娜(Tiina)2013年

-3

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

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

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

CTRL+Space


3
整个问题是我想要自动激活行为,而无需空格键执行自动完成
davnicwil 2013年

-3

在Eclipse中,转到窗口->首选项->常规->键,然后删除命令Content Assist的绑定。


1
这将消除使用ctrl + Space提出建议的可能性。OP想要的是一种使用空格键禁用建议选择的方法。对此没有键绑定。
Herman 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.