〖Eclipse〗Eclipse实现类似于YouCompleteMe补全插件的tab选择,shift+tab反向选择,空格、回车、点号等结束选择。
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()”的函数,直接修改为如下内容:
1 /* 2 * @see IContentAssistListener#verifyKey(VerifyEvent) 3 */ 4 public boolean verifyKey(VerifyEvent e) { 5 if (!Helper.okToUse(fProposalShell)) 6 return true; 7 8 char key= e.character; 9 if (key == 0 || key == '\t') { 10 int newSelection= fProposalTable.getSelectionIndex(); 11 int visibleRows= (fProposalTable.getSize().y / fProposalTable.getItemHeight()) - 1; 12 int itemCount= fProposalTable.getItemCount(); 13 14 //Shift + Tab 15 if ( (e.stateMask == SWT.SHIFT ) && (e.keyCode == SWT.TAB) ) { 16 newSelection -= 1; 17 if (newSelection < 0) 18 newSelection= itemCount - 1; 19 20 selectProposal(newSelection, (e.stateMask & SWT.CTRL) != 0); 21 e.doit= false; 22 return false; 23 } 24 switch (e.keyCode) { 25 26 case SWT.ARROW_LEFT : 27 case SWT.ARROW_RIGHT : 28 filterProposals(); 29 return true; 30 31 case SWT.ARROW_UP : 32 newSelection -= 1; 33 if (newSelection < 0) 34 newSelection= itemCount - 1; 35 break; 36 37 case SWT.ARROW_DOWN : 38 newSelection += 1; 39 if (newSelection > itemCount - 1) 40 newSelection= 0; 41 break; 42 43 case SWT.TAB : 44 newSelection += 1; 45 if (newSelection > itemCount - 1) 46 newSelection= 0; 47 break; 48 49 case SWT.PAGE_DOWN : 50 newSelection += visibleRows; 51 if (newSelection >= itemCount) 52 newSelection= itemCount - 1; 53 break; 54 55 case SWT.PAGE_UP : 56 newSelection -= visibleRows; 57 if (newSelection < 0) 58 newSelection= 0; 59 break; 60 61 case SWT.HOME : 62 newSelection= 0; 63 break; 64 65 case SWT.END : 66 newSelection= itemCount - 1; 67 break; 68 69 default : 70 if (e.keyCode != SWT.CAPS_LOCK && e.keyCode != SWT.MOD1 && e.keyCode != SWT.MOD2 && e.keyCode != SWT.MOD3 && e.keyCode != SWT.MOD4) 71 hide(); 72 return true; 73 } 74 75 selectProposal(newSelection, (e.stateMask & SWT.CTRL) != 0); 76 77 e.doit= false; 78 return false; 79 80 } 81 82 // key != 0 83 switch (key) { 84 case 0x1B: // Esc 85 e.doit= false; 86 hide(); 87 break; 88 89 case '\n': // Ctrl-Enter on w2k 90 case '\r': // Enter 91 case ' ': //Space 92 e.doit= false; 93 insertSelectedProposalWithMask(e.stateMask); 94 break; 95 96 // case '\t': 97 // e.doit= false; 98 // insertSelectedProposalWithMask(e.stateMask); 99 // return false; 100 101 default: 102 ICompletionProposal p= getSelectedProposal(); 103 if (p instanceof ICompletionProposalExtension) { 104 ICompletionProposalExtension t= (ICompletionProposalExtension) p; 105 char[] triggers= t.getTriggerCharacters(); 106 if (key!='='&&key!=0x20&&key!='.'&&key!=';'&&contains(triggers, key)) { 107 e.doit= false; 108 hide(); 109 insertProposal(p, key, e.stateMask, fContentAssistSubjectControlAdapter.getSelectedRange().x); 110 } 111 } 112 } 113 114 return true; 115 }
这样会取消“=”,空格,“.”和“;”的自动补全,加入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