〖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 == '	') {
 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 '
': // Ctrl-Enter on w2k
 90             case '
': // Enter
 91             case ' ': //Space
 92                 e.doit= false;
 93                 insertSelectedProposalWithMask(e.stateMask);
 94                 break;
 95 
 96 //            case '	':
 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

原文地址:https://www.cnblogs.com/scue/p/3320365.html