eclipse提示优化

转载自: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


新版eclipse showview没有Plug-in Development这个选项了,得直接在 window->prefernce->java->editor->content assists中选中disable insertion triggers except “Enter”。


转载自:https://blog.csdn.net/l1445453337/article/details/89455185

你可能感兴趣的:(Eclipse)