增加代码提示触发器
Eclipse默认的自动补全触发器是 .
,也就是只有在输入 .
时才会出现代码补全的提示信息。
要想让Eclipse支持更多触发器,可进行如下设置:
打开 Eclipse 依次选择 Window -> Perferences -> Java -> Editor -> Content Assist ,修改 右侧面板中 Auto activation triggers for Java:设置框中的值(默认是 .
)为 .abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_
需要注意的是,这个输入框默认只能输入5个字符,一个变通的解决方法是导出 Eclipse 的配置文件,修改后再导回去。
-
可以先在该输入框中随便输入5个字符(一会儿用于查找,所以最好有点特异性),比如
aaaaa
,保存后关闭设置窗口。 -
依次打开 File -> export -> general -> preferences -> 选择保存位置(比如 C:/eclipse.epf)。
-
用文本编辑器打开导出的配置文件 eclipse.epf ,将导出前设置的5个字符
aaaaa
替换成.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_
或者其他需要的字符,然后保存。 -
回到 Eclipse ,依次点击 File -> import -> general -> preferences -> 导入修改后的 eclipse.epf 文件。
但是,一个新的问题可能出现了,那就是当按下空格键或等号时会把提示列表第一行的内容上屏。这本不是大的问题,我个人就习惯使用空格完成补全,但是由于上述设置,输入变量名时实时触发了自动提示,Eclipse 会自动在变量名后面加上变量类型。比如,要新建一个 String 类型的变量 s,当输入 s 的时候,Eclipse会在提示列表中列出 sString ,如果此时按下空格(或者等号)的话,就会选中列表中的sString ,新建的变量将会变成 sString 。为避免这种情况出现就只能在出现候选列表时按Esc键关闭代码提示之后再敲入空格或者等号。
导致这一问题的根源在于 Eclipse 默认的上屏键,得益于 Eclipse 的开源,我们可以通过源码修改自定义它的上屏键。
修改 Eclipse 上屏键
导入相关插件工程
打开Eclipse,依次选择 Window -> Show view->Plug-in Development-> Plug-ins,再在刚才添加的Plug-ins选项卡中找到org.eclipse.jface.text,右键单击,选择 import as-> Source Project,导入完成后,在你的 workspace 就可以看到这个 project 了。
解决工程中无源码问题
如果工程里没有src这个文件夹,说明你使用的版本中没有带源代码,有两种办法可以解决。
-
在 Eclipse 中安装Eclipse SDK
打开 Help -> Install New Software ,搜索Eclipse SDK ,选中后按提示完成下载和安装。安装完成后,会在Eclipse 安装路径下的 plugins 目录中出现 org.eclipse.jface.text.source_*.jar (*部分为版本号)文件,重新启动后重复导入工程的操作即可。
-
手动下载一个和 Eclipse 版本相同的 Eclipse SDK
下载地址:http://download.eclipse.org/eclipse/downloads/ ,下载完成后,将其解压,在 plugins 目录下找到 org.eclipse.jface.text.source_*.jar 文件,拷贝至Eclipse 安装路径下的 plugins 目录下。然后重新启动Eclipse。重复导入操作,就可以得到含有src文件夹的工程了。当然,也可以直接打开 Eclipse SDK 在其中进行导入工程等操作。
正常情况下 org.eclipse.jface.text.source_*.jar 和 org.eclipse.jface.text_*.jar 应版本号系统,否则说明SDK版本有误。
修改源码
打开工程下的 org.eclipse.jface.text.contentassist.CompletionProposalPopup
类,定位到函数 verifyKey
,函数中有以下一段代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
// key != 0 switch (key) { case 0x1B: // Esc e.doit= false; hide(); break; case '\n': // Ctrl-Enter on w2k case '\r': // Enter e.doit= false; insertSelectedProposalWithMask(e.stateMask); break; case '\t': e.doit= false; fProposalShell.setFocus(); return false; default: ICompletionProposal p= getSelectedProposal(); if (p instanceof ICompletionProposalExtension) { ICompletionProposalExtension t= (ICompletionProposalExtension) p; char[] triggers= t.getTriggerCharacters(); if (contains(triggers, key)) { e.doit= false; hide(); insertProposal(p, key, e.stateMask, fContentAssistSubjectControlAdapter.getSelectedRange().x); } } } |
将这段代码中的
1 2 3 4 5 |
if (contains(triggers, key)) { e.doit = false; hide(); insertProposal(p, key, e.stateMask,fContentAssistSubjectControlAdapter.getSelectedRange().x); } |
改为
1 2 3 4 5 6 |
// 关闭 空格、等号、分号 的上屏功能 if (key!=0x20&& key!='='&& key!=';'&& contains(triggers, key)) { e.doit = false; hide(); insertProposal(p, key, e.stateMask,fContentAssistSubjectControlAdapter.getSelectedRange().x); } |
这样就使得空格键、等号和分号都不再有上屏功能,只保留回车键作为上屏键。如果想把 Tab 键也作为上屏键,须将上述代码块中的
1 2 3 4 5 6 7 8 9 10 |
case '\n': // Ctrl-Enter on w2k case '\r': // Enter e.doit= false; insertSelectedProposalWithMask(e.stateMask); break; case '\t': e.doit= false; fProposalShell.setFocus(); return false; |
改为:
1 2 3 4 5 6 |
case '\n': // Ctrl-Enter on w2k case '\r': // Enter case '\t': // TAB键上屏 e.doit= false; insertSelectedProposalWithMask(e.stateMask); break; |
导出修改后的插件
最后就是导出修改后的插件,右键点击工程,依次选择 Export-> Plug-in Development-> Deployable plugins and fragments,点击 Next,在 Destination 中的 Directory,选择一个要保存插件的目录,然后 Finish。就会在所选的目录下产生一个新的 plugins 目录,里面有一个jar文件,用它替换掉 Eclipse 安装目录下的 plugins 里面对应的org.eclipse.jface.text_*.jar 。
替换之后重启 Eclipse即可生效。