• Eclipse自动补全修改


    一、前言

    之前敲代码用的是文本工具sublime,转到Eclipse之后发现补全功能特别不方便,所以想根据自己的情况进行调整,具体有两点:

    • 输入某些语句的前几个字母就能自动提示相关的完整语句
    • 用tab自动补全当前语句

    根据这两个需求进行修改。

    二、增强提示功能

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

    注意:设置完所有字符都提示之后,可能敲代码的时候会有点卡建议设置一下Auto activation delay 的值,主要看个人手速与习惯,我是设置到400,后面会根据习惯继续调整。

    三、修改自动补快捷键

    Eclipse默认有补全提示的时候,按下“=”,空格,“.”和“;”这几个符号都对当前语句进行补全,非常不符合编辑习惯,所以要改成只有tab键才会进行补全,主要思路是:

    • 修改相关插件源码
    • 重新编译,导出修改后的插件
    • 覆盖原来的插件,重启Eclipse

    需要根据Eclipse的情况去达成目的,我的Eclipse版本是4.2.0,需要修改的插件版本是org.eclipse.jface.text_3.8.2.v20121126-164145。注意,在覆盖插件之前,请先备份在plugins目录下的原来的插件

    1. Eclipse自带插件源码

    这种情况只适用于Eclipse Classic版本,因为这种版本才有插件源码。

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

    在导入工程下的“org.eclipse.jface.text.contentassist.CompletionProposalPopup#verifyKey()”函数中有一段代码:

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

    最后就是导出修改后的插件,右键点击你的workspace里的工程,选择Export->Deployable plugins and fragments,点击Next,选择Destination选项卡,选择Directory,选择一个要保存插件的目录,然后Finish,这样会得到一个zip包,打开,plugins里会有一个jar包,替换Eclipse的目录下的plugins里的同名文件,重启Eclipse。

    2. 通过别的渠道找源码

    我用的版本没有提供插件源码,后面从github上面找了这个版本的源码,fork了一个分支到我的地址,并修改了上面提到的文件,地址是:https://github.com/harrymore/org.eclipse.jface.text

    下载并解压这个包,导入项目:File->Import->General->Existing Projects into Workspace,选择源码所在目录,完成。

    导出插件,覆盖Eclipse的插件,最后重启Eclipse。

    ps:后面发现我org.eclipse.jface.text_3.8.2.v20121126-164145.jar这个版本的插件,直接放在eclipse4.5.1版本里也能用,那个版本的插件具体版本是org.eclipse.jface.text_3.10.0.v20150603-1752.jar

    四、参考

    1. Eclipse自动补全增强

  • 相关阅读:
    JVM 类加载过程
    JVM调优总结 -Xms
    JVM 内存模型
    git克隆远程项目并创建本地对应分支
    内存泄漏 和 内存溢出
    weblogic 乱码
    tomcat 、NIO、netty 本质
    Anything is possible if you have got enough nerve.
    maven build 的时候,卡死在Downloading metadata的解决方法
    TimeUnit
  • 原文地址:https://www.cnblogs.com/harrymore/p/9152851.html
Copyright © 2020-2023  润新知