转载自:https://blog.csdn.net/l1445453337/article/details/89455185
旧版本Eclipse自动补全设置优化
增加代码提示触发器
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 ,函数中有以下一段代码:
// 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);
}
}
}
// 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);
}
}
}
将这段代码中的
if (contains(triggers, key)) {
e.doit = false;
hide();
insertProposal(p, key, e.stateMask,fContentAssistSubjectControlAdapter.getSelectedRange().x);
}
if (contains(triggers, key)) {
e.doit = false;
hide();
insertProposal(p, key, e.stateMask,fContentAssistSubjectControlAdapter.getSelectedRange().x);
}
改为
// 关闭 空格、等号、分号 的上屏功能
if (key!=0x20&& key!='='&& key!=';'&& contains(triggers, key)) {
e.doit = false;
hide();
insertProposal(p, key, e.stateMask,fContentAssistSubjectControlAdapter.getSelectedRange().x);
}
// 关闭 空格、等号、分号 的上屏功能
if (key!=0x20&& key!='='&& key!=';'&& contains(triggers, key)) {
e.doit = false;
hide();
insertProposal(p, key, e.stateMask,fContentAssistSubjectControlAdapter.getSelectedRange().x);
}
这样就使得空格键、等号和分号都不再有上屏功能,只保留回车键作为上屏键。如果想把 Tab 键也作为上屏键,须将上述代码块中的
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;
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;
改为:
case '\n': // Ctrl-Enter on w2k
case '\r': // Enter
case '\t': // TAB键上屏
e.doit= false;
insertSelectedProposalWithMask(e.stateMask);
break;
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即可生效。
引用自:http://zhiheng.me/43
转载自:https://blog.csdn.net/l1445453337/article/details/89455185