zoukankan      html  css  js  c++  java
  • 〖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

  • 相关阅读:
    windows任务计划
    PHP创建多级文件夹
    js正则表达式(不断总结中....)
    js随机改变背景颜色
    提高PHP代码质量36计
    PHP中使用Filter进行数据安全过滤
    CSS颜色代码大全
    正则表达式的修饰符
    创建索引视图
    读取xml中的所有文件名
  • 原文地址:https://www.cnblogs.com/scue/p/3320365.html
Copyright © 2011-2022 走看看