java中如何让输出语句自动补齐_Eclipse自动补全设置

增加代码提示触发器

Eclipse默认的自动补全触发器是 . ,也就是只有在输入 . 时才会出现代码补全的提示信息。

要想让Eclipse支持更多触发器,可进行如下设置:

打开 Eclipse 依次选择 Window -> Perferences -> Java -> Editor -> Content Assist ,修改 右侧面板中 Auto activation triggers for Java:设置框中的值(默认是 .)为 .abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_

需要注意的是,这个输入框默认只能输入5个字符,一个变通的解决方法是导出 Eclipse 的配置文件,修改后再导回去。

可以先在该输入框中随便输入5个字符(一会儿用于查找,所以最好有点特异性),比如 aaaaa ,保存后关闭设置窗口。

依次打开 File -> export -> general -> preferences -> 选择保存位置(比如 C:/eclipse.epf)。

用文本编辑器打开导出的配置文件 eclipse.epf ,将导出前设置的5个字符 aaaaa 替换成

.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_ 或者其他需要的字符,然后保存。

回到 Eclipse ,依次点击 File -> import -> general -> preferences -> 导入修改后的 eclipse.epf 文件。

但是,一个新的问题可能出现了,那就是当按下空格键或等号时会把提示列表第一行的内容上屏。这本不是大的问题,我个人就习惯使用空格完成补全,但是由于上述设置,输入变量名时实时触发了自动提示,Eclipse 会自动在变量名后面加上变量类型。比如,要新建一个 String 类型的变量 s,当输入 s 的时候,Eclipse会在提示列表中列出 sString ,如果此时按下空格(或者等号)的话,就会选中列表中的sString ,新建的变量将会变成 sString 。为避免这种情况出现就只能在出现候选列表时按Esc键关闭代码提示之后再敲入空格或者等号。

导致这一问题的根源在于 Eclipse 默认的上屏键,得益于 Eclipse 的开源,我们可以通过源码修改自定义它的上屏键。

修改 Eclipse 上屏键

导入相关插件工程

打开Eclipse,依次选择 Window -> Show view->Plug-in Development-> Plug-ins,再在刚才添加的Plug-ins选项卡中找到org.eclipse.jface.text,右键单击,选择 import as-> Source Project,导入完成后,在你的 workspace 就可以看到这个 project 了。

解决工程中无源码问题

如果工程里没有src这个文件夹,说明你使用的版本中没有带源代码,有两种办法可以解决。

在 Eclipse 中安装Eclipse SDK

打开 Help -> Install New Software ,搜索Eclipse SDK ,选中后按提示完成下载和安装。安装完成后,会在Eclipse 安装路径下的 plugins 目录中出现 org.eclipse.jface.text.source_*.jar (*部分为版本号)文件,重新启动后重复导入工程的操作即可。

手动下载一个和 Eclipse 版本相同的 Eclipse SDK

下载地址:http://download.eclipse.org/eclipse/downloads/ ,下载完成后,将其解压,在 plugins 目录下找到 org.eclipse.jface.text.source_*.jar 文件,拷贝至Eclipse 安装路径下的 plugins 目录下。然后重新启动Eclipse。重复导入操作,就可以得到含有src文件夹的工程了。当然,也可以直接打开 Eclipse SDK 在其中进行导入工程等操作。

正常情况下 org.eclipse.jface.text.source_*.jar 和 org.eclipse.jface.text_*.jar 应版本号系统,否则说明SDK版本有误。

修改源码

打开工程下的 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);

}

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

// key != 0

switch(key){

case0x1B:// 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();

returnfalse;

default:

ICompletionProposalp=getSelectedProposal();

if(pinstanceofICompletionProposalExtension){

ICompletionProposalExtensiont=(ICompletionProposalExtension)p;

char[]triggers=t.getTriggerCharacters();

if(contains(triggers,key)){

e.doit=false;

hide();

insertProposal(p,key,e.stateMask,fContentAssistSubjectControlAdapter.getSelectedRange().x);

}

}

}

将这段代码中的

if (contains(triggers, key)) {

e.doit = false;

hide();

insertProposal(p, key, e.stateMask,fContentAssistSubjectControlAdapter.getSelectedRange().x);

}

1

2

3

4

5

if(contains(triggers,key)){

e.doit=false;

hide();

insertProposal(p,key,e.stateMask,fContentAssistSubjectControlAdapter.getSelectedRange().x);

}

改为

// 关闭 空格、等号、分号 的上屏功能

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

e.doit = false;

hide();

insertProposal(p, key, e.stateMask,fContentAssistSubjectControlAdapter.getSelectedRange().x);

}

1

2

3

4

5

6

// 关闭 空格、等号、分号 的上屏功能

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

e.doit=false;

hide();

insertProposal(p,key,e.stateMask,fContentAssistSubjectControlAdapter.getSelectedRange().x);

}

这样就使得空格键、等号和分号都不再有上屏功能,只保留回车键作为上屏键。如果想把 Tab 键也作为上屏键,须将上述代码块中的

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;

1

2

3

4

5

6

7

8

9

10

case'\n':// Ctrl-Enter on w2k

case'\r':// Enter

e.doit=false;

insertSelectedProposalWithMask(e.stateMask);

break;

case'\t':

e.doit=false;

fProposalShell.setFocus();

returnfalse;

改为:

case '\n': // Ctrl-Enter on w2k

case '\r': // Enter

case '\t': // TAB键上屏

e.doit= false;

insertSelectedProposalWithMask(e.stateMask);

break;

1

2

3

4

5

6

case'\n':// Ctrl-Enter on w2k

case'\r':// Enter

case'\t':// TAB键上屏

e.doit=false;

insertSelectedProposalWithMask(e.stateMask);

break;

导出修改后的插件

最后就是导出修改后的插件,右键点击工程,依次选择 Export-> Plug-in Development-> Deployable plugins and fragments,点击 Next,在 Destination 中的 Directory,选择一个要保存插件的目录,然后 Finish。就会在所选的目录下产生一个新的 plugins 目录,里面有一个jar文件,用它替换掉 Eclipse 安装目录下的 plugins 里面对应的org.eclipse.jface.text_*.jar 。

替换之后重启 Eclipse即可生效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值