一、前言
之前敲代碼用的是文本工具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