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 '\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);
                    }
            }
        }

最后就是導出修改后的插件,右鍵點擊你的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自動補全增強


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM