DIY增强eclipse的代码自动补全功能

来源:互联网 发布:js confirm 修改按钮 编辑:程序博客网 时间:2024/05/16 07:52

    用过eclipse的同学一定生有体会,只有在打.的时候才会出现一个list,可以自动补全。但是java,android自带包的类,方法什么的名字都好长......实在不想多打字......有没有偷懒的方法呢??
     当然是有的!别忘了eclipse是开源的,意味着可以定制!
     Google了一下,确实有不少教程,我又发现中国文章一大抄啊......很多Blog是一样的......而且过时了......比如,好多Blog说修该文件增强自动补全,原因在于eclipse只支持四个自定义自动补全字符,但是新版的不存在这个问题,新版的可以直接添加任意个字符,好了,说了这么多,直接上方法!
 直接定位Windows->Preferences->Java->Editor->Content Assist,在最后一栏的Auto activation triggers for java里添加abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,意思就是遇到这些字符的时候,eclipse都会自动补全代码。
     哈哈,敲起代码不是一般爽。
     别高兴太早,这样会带来一些问题,比如我敲这么一句代码时:String pub = "Hello!";直接敲出来肯定是String public = "Hello";(注意变量名字的变化),因为eclipse默认敲空格的时候把提示补全的list的第一个推荐上屏。是不是很郁闷......不过还是那句别忘了eclipse是开源的,意味着可以定制!一定要让机器服从人类,而不是适应机器,这也许可能就是玩Linux的人鄙视Windows的原因之一吧......跑题了...win粉勿喷......我们的目标是取消“=”,空格,“.”和“;”的自动补全,加入TAB的自动补全。
 
     解决方案如下:
 
     //网上说打开Eclipse,打开window->show view,选择Plug-ins,再找到org.eclipse.jface.text,右键单击,选择import as-> Source Project,导入完成后,在你的workspace就可以看到这个project了。在导入工程下的“org.eclipse.jface.text.contentassist.CompletionProposalPopup#verifyKey()”函数中有一段代码......

     可是我压根就没找到Plug-ins!!!其实那还是因为eclipse版本的问题,现在的新版本已经没有这个了,取而代之的是在Window->Show View->的Other...里的PDE(首字母缩写,全名忘了......弹出对话框上面的搜索里输入P找一下)里的Plug-ins,而且必须是eclipse SDk版本的导入后才有源码!如果你不想重装你现在的eclipse的话,就下载一个eclipse SDk然后修改完替换目前的(目录是eclipse根目录下的plugins目录下的org.eclipse.jface.text._XXX,XXX是版本号,记得备份)。
    修改方法:
    找到以下代码片段:

// key != 0        switch (key) {            case 0x1B: // Esc                e.doit= false;                hide();                break;            case '\n': // Ctrl-Enter on w2k            case '\r': // Enter                e.doit= false;                insertSelectedProposalWithMask(e.stateMask);                break;            case '\t':                e.doit= false;                fProposalShell.setFocus();                return false;            default:                ICompletionProposal p= getSelectedProposal();                if (p instanceof ICompletionProposalExtension) {                    ICompletionProposalExtension t= (ICompletionProposalExtension) p;                    char[] triggers= t.getTriggerCharacters();                    if (contains(triggers, key)) {                        e.doit= false;                        hide();                        insertProposal(p, key, e.stateMask, fContentAssistSubjectControlAdapter.getSelectedRange().x);                    }            }        }

    修改为(注意红色部分):

// key != 0        switch (key) {            case 0x1B: // Esc                e.doit= false;                hide();                break;            case '\n': // Ctrl-Enter on w2k            case '\r': // Enter                e.doit= false;                insertSelectedProposalWithMask(e.stateMask);                break;            case '\t':                e.doit= false;                insertSelectedProposalWithMask(e.stateMask);                break;            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);                    }            }        }

    注意其中:31,,47行

    如此之后,eclipse成为拍码神器~~翘起代码爽死了~~

    怎么更改代码某一句字体颜色?发表后总是变成html代码...像这样: 

  if (key!='='&&key!=0x20&&key!='.'&&key!=';'&&contains(triggers, key))