首页 > 代码库 > ecilpse使用tab选择补全
ecilpse使用tab选择补全
(转帖)本文转自:
scue
Jason Sun
使用eclipse的自动补全,有时候要选的字不是第一个,需要在proposal中向下移动光标选择,但是eclipse只能按方向键完成,没有tab补全来的爽,找过似乎也没有这样的插件,只好找到一个修改一点源码的方法:
1.首先,打开Eclipse,打开window->show view,选择Plug-ins,再找到org.eclipse.jface.text,右键单击,选择import as-> Source Project,导入完成后,在你的workspace就可以看到这个project了。
2.在project中找到“org.eclipse.jface.text.contentassist.CompletionProposalPopup#verifyKey()”函数
将整个verifyKey()函数修改为:
/* * @see IContentAssistListener#verifyKey(VerifyEvent) */ public boolean verifyKey(VerifyEvent e) { if (!Helper.okToUse(fProposalShell)) return true; char key= e.character; if (key == 0 || key == ‘\t‘) { int newSelection= fProposalTable.getSelectionIndex(); int visibleRows= (fProposalTable.getSize().y / fProposalTable.getItemHeight()) - 1; int itemCount= fProposalTable.getItemCount(); //Shift + Tab if ( (e.stateMask == SWT.SHIFT ) && (e.keyCode == SWT.TAB) ) { newSelection -= 1; if (newSelection < 0) newSelection= itemCount - 1; selectProposal(newSelection, (e.stateMask & SWT.CTRL) != 0); e.doit= false; return false; } switch (e.keyCode) { case SWT.ARROW_LEFT : case SWT.ARROW_RIGHT : filterProposals(); return true; case SWT.ARROW_UP : newSelection -= 1; if (newSelection < 0) newSelection= itemCount - 1; break; case SWT.ARROW_DOWN : newSelection += 1; if (newSelection > itemCount - 1) newSelection= 0; break; case SWT.TAB : newSelection += 1; if (newSelection > itemCount - 1) newSelection= 0; break; case SWT.PAGE_DOWN : newSelection += visibleRows; if (newSelection >= itemCount) newSelection= itemCount - 1; break; case SWT.PAGE_UP : newSelection -= visibleRows; if (newSelection < 0) newSelection= 0; break; case SWT.HOME : newSelection= 0; break; case SWT.END : newSelection= itemCount - 1; break; default : if (e.keyCode != SWT.CAPS_LOCK && e.keyCode != SWT.MOD1 && e.keyCode != SWT.MOD2 && e.keyCode != SWT.MOD3 && e.keyCode != SWT.MOD4) hide(); return true; } selectProposal(newSelection, (e.stateMask & SWT.CTRL) != 0); e.doit= false; return false; } // key != 0 switch (key) { case 0x1B: // Esc e.doit= false; hide(); break; case ‘\n‘: // Ctrl-Enter on w2k case ‘\r‘: // Enter case ‘ ‘: //Space e.doit= false; insertSelectedProposalWithMask(e.stateMask); break;// case ‘\t‘:// e.doit= false;// insertSelectedProposalWithMask(e.stateMask);// return false; default: ICompletionProposal p= getSelectedProposal(); if (p instanceof ICompletionProposalExtension) { ICompletionProposalExtension t= (ICompletionProposalExtension) p; char[] triggers= t.getTriggerCharacters(); if (key!=‘=‘&&key!=0x20&&key!=‘.‘&&key!=‘;‘&&contains(triggers, key)) { e.doit= false; hide(); insertProposal(p, key, e.stateMask, fContentAssistSubjectControlAdapter.getSelectedRange().x); } } } return true; }
3.这样会取消“=”,空格,“.”和“;”的自动补全,加入TAB的自动补全。 最后就是导出修改后的插件,右键点击你的workspace里的工程,选择Export->Deployable plugins and fragments,点击Next,选择Destination选项卡,选择Directory,选择一个要保存插件的目录,然后Finish,这样会得 到一个zip包,打开,plugins里会有一个jar包,替换Eclipse的目录下的plugins里的同名文件(最好先把原plugins目录下的 org.eclipse.jface.text_3.7.2.v20111213-1208.jar(因为Eclipse版本的不同这个文件的名字可能不 同)备份)。