您的位置:首页 > 编程语言 > Java开发

〖Eclipse〗Eclipse实现类似于YouCompleteMe补全插件的tab选择,shift+tab反向选择,空格、回车、点号等结束选择。

2013-09-13 21:36 399 查看
1.增加Eclipse的提示功能

在Eclipse中,从Window -> preferences -> Java -> Editor -> Content assist -> Auto-Activation下,我们可以在"."号后面加入我们需要自动提示的首字幕,比如"abc",可以把26个字母的大小写全部加上(.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_)。

2. 修改自动补全的快捷键

首先,打开Eclipse,打开window->show view,选择Plug-ins,再找到org.eclipse.jface.text,右键单击,选择import as-> Source Project,导入完成后,在你的workspace就可以看到这个project了。

在导入工程下的“org.eclipse.jface.text.contentassist.CompletionProposalPopup#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;
}


这样会取消“=”,空格,“.”和“;”的自动补全,加入TAB的自动补全、Tab向下选择、Shift+Tab向上选择。

最后就是导出修改后的插件,右键点击你的workspace里的工程,选择Export->Deployable plugins and fragments,点击Next,选择Destination选项卡,选择Directory,选择一个要保存插件的目录,然后Finish,这样会得到一个zip包,打开,plugins里会有一个jar包,替换Eclipse的目录下的plugins里的同名文件(最好先把原plugins目录下的org.eclipse.jface.text_3.8.2.v20121126-164145.jar(因为Eclipse版本的不同这个文件的名字可能不同)备份)。

修改后使用Eclipse会很顺手!

参考来源:http://www.cnblogs.com/sunjie21/archive/2012/06/28/2567463.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐