背景:这个问题困扰了很长时间,解决过程也并不顺利。不断的试错,再次让我理解这下面这句话——

世界上对的路可能只有一条,错的路却可能有成千上万条,不要成为别人的前车之鉴。开发之路,只需要记住对的路就行了。

1 过程分析

在修改eclipse插件相关配置的时候,记得做好备份工作,随时回滚。

1.1 问题描述

在eclipse或MyEclipse中,我们在写代码的时候经常会遇到变量名自动补全问题,举个栗子:我们定义变量String e的时候,按下等号或空格键会变成这样String eString。这个问题很是烦人。

设置代码提示

1.2 打开自动提示

打开 Eclipse 依次选择 Window -> Perferences -> Java -> Editor -> Content Assist,Auto activation triggers for Java:设置框中默认是"."

现在将它改为:

  .abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_

有老版本的Eclipse不支持定义这么多触发器,可以通过修改配置文件实现,网上资料很多。

然后你就会发现Eclipse可以使用更智能的代码提示了。但是现在有一个比较大的问题是,Eclipse智能过头了,它总想帮我们完成一些我们不想要的代码补完。比如按“=”和空格以后就会自动补完代码,这对很多人真的不能忍。

幸好Eclipse是开源软件,解决办法是直接修改代码提示功能的源代码,以完成我们需要的功能。

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

如果没有src这个文件夹,说明你使用的版本中没有带源代码,我正好也是这种情况。

源代码可以去这个地址下载(找了我好久好久)

http://archive.eclipse.org/eclipse/downloads/

查看sts的版本号:

x86表示架构,和位数没有关系,后面的64表示位数。

所以我这里下载3.6  64版本的eclipse。

在页面上选择你Eclipse版本的连接(我使用的是4.4.2),然后在新页面中下载eclipse-SDK-(*************).zip,根据自己的需要选择合适的版本下载,大概200M左右。下载完成以后解压缩,在.\eclipse\plugins\文件夹下找到  org.eclipse.jface.text.source_3.9.2.v20141003-1326.jar  (这是对应我使用的Eclipse版本的文件,实际请根据你自己的版本进行选择),将这个文件复制到你自己的Eclipse安装目录下的.\eclipse\plugins\文件夹下,然后重新启动Eclipse。重复上面的操作导入(import)org.eclipse.jface.text,此时就能够看到src文件夹了。

在src文件夹下org.eclipse.jface.text.contentassist.CompletionProposalPopup#verifyKey()”函数中有一段代码:

if(contains(triggers, key)){

...

}

将这段代码改为

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

...

}

还有把这段代码之上的代码

case'\t':
e.doit=false;
fProposalShell.setFocus();
returnfalse;

修改为

case'\t':
    e.doit=false;
    insertSelectedProposalWithMask(e.stateMask);
    break;

如图:

修改为

经过上述操作,这个辅助输入插件已经排除了空格与“=”的选中功能,增加了TAB键的选中功能。

最后就是导出修改后的插件,右键点击你的workspace里的工程,选择Export->Deployable plugins and fragments,点击Next,选择Destination选项卡,选择Directory,选择一个要保存插件的目录,然后Finish。

然后就会在你所选的目录下产生一个新的plugins目录,里面有一个jar文件,用它替换掉eclipse/plugins里面的org.eclipse.jface.text,记得覆盖前对原文件进行备份。然后重新启动Eclipse。

如果不想自己下载与修改文件,我这里直接提供修改好的jar包,直接进行覆盖就好了。我的版本是org.eclipse.jface.text.source_3.9.2.v20141003-1326.jar

ps:这里我用上述方法折腾了好久,没有成功:要先下载eclipse,再去修改,下载的eclipse版本和我自己的sts版本不对应。

但好消息是,在网上我可以直接搜到修改后的org.eclipse.jface.text.source_3.9.2.v20141003-1326.jar。

如果懒得自己改,可以试着搜索网上已经修改好的jar包,版本一定要一致。搜索后直接将eclipse plugins文件夹下的原jar包替换掉即可。此时,正常启动eclipse,然后测试即可。

替换的时候,可以先把eclipse做个备份,以防万一,这次就是替换完之后再也回不去了,浪费了近一天的时间。

这里可以回去时候,在宿舍电脑做个试验。

网上找的是这么修改的:

1.3 下载地址

这里分享下我下载的文件:http://pan.baidu.com/s/1kVorTqv

因为我的sts中是编译后的class文件,所以直接使用编译的jar进行替换即可。在具体操作时候,使用对应版本的jar文件,修改后替换。

sts3.6.4 版本下载链接https://pan.baidu.com/s/1jIFz0Po

2  遇到的问题

2.1 版本问题

对于MyEclipse:

但是在MyEclipse中同上述eclipse的步骤1导入完成后,在工程文件里是没有src/这个文件夹的:

这里我们的解决办法是:去官网下载MyEclipse对应的eclipse版本,然后在eclipse中修改(方法同上),修改后在生成好的zip压缩文件中可以看到生成修改后的jar包,用它替换掉MyEclipse/Common/plugins里面的同名jar包就可以了

注意:这里我们如何看MyEclipse对应的eclipse版本?

举个栗子:我在我的MyEclipse中找到org.eclipse.jface.text的jar包后面会跟一串数字,

如org.eclipse.jface.text_3.6.1.r361_v20100825-0800.jar,这个数字3.6就是说我的MyEclipse对应eclipse 3.6版本。

2.2 无法启动问题

由于第一次尝试,所以在网上找到方法之后,没有仔细看,就用org.eclipse.jface.text.source_3.9.2.v20141003-1326.jar 替换了sts中的org.eclipse.jface.text_3.9.2.v20141003-1326.jar,这两个名字都不一样,当时只是核对了下版本,然后启动sts过程中就开始报错。

即使是将原来的jar文件还原回去,问题依旧。总之在试错的路上越走越远,最终sts彻底启动不了。

!SESSION 2017-11-10 10:30:16.927 -----------------------------------------------
eclipse.buildId=3.6.4.201503100339-RELEASE-e44
java.version=1.7.0_80
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=zh_CN
Framework arguments: -product org.springsource.sts.ide
Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.springsource.sts.ide !ENTRY OpenExplorer 4 0 2017-11-10 10:30:21.102
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.osgi.framework.BundleException: Could not resolve module: OpenExplorer [5]
Unresolved requirement: Require-Bundle: org.eclipse.jface.text at org.eclipse.osgi.container.Module.start(Module.java:434)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1582)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1561)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1533)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1476)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340) !ENTRY com.atlassian.connector.eclipse.branding.ui 4 0 2017-11-10 10:30:21.108
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.osgi.framework.BundleException: Could not resolve module: com.atlassian.connector.eclipse.branding.ui [9]
Unresolved requirement: Require-Bundle: org.eclipse.mylyn.commons.workbench; bundle-version="[3.8.0,4.0.0)"
-> Bundle-SymbolicName: org.eclipse.mylyn.commons.workbench; bundle-version="3.14.2.v20150217-2244"; singleton:="true"
org.eclipse.mylyn.commons.workbench [631]
Unresolved requirement: Require-Bundle: org.eclipse.jface.text at org.eclipse.osgi.container.Module.start(Module.java:434)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1582)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1561)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1533)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1476)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)

如果报上述错误,可以尝试将eclipse——plugins目录下的config.ini文件进行修改,尝试抢救一下,

org.eclipse.update.reconcile=true

在正常启动后,可以参考http://www.cnblogs.com/lixuwu/p/6384150.html

Eclipse导入导出Preference配置文件  这部分内容,保存eclipse的相关配置文件。

使用上述方式修改存在一个弊端,就是不能将原配置改成true形式,导致每次eclipse启动十分的缓慢,忍受不了,还不如重装。所以最好还是做好备份。

本想着省点事,最终却是从头来,所以我就重新解压了一个sts的压缩文件,将之前的工作空间导入。

工程中的配置 代码都还在,只是eclipse中安装的一些插件,和一些配置已经不在,需要重新操作一遍。

反编译安装:http://www.cnblogs.com/lixuwu/p/5795690.html

如何解决eclipse、MyEclipse中变量名自动补全问题的更多相关文章

  1. eclipse变量名自动补全

    对于编程人员来说,要记住大量的类名或类方法的名字,着实不是一件容易的事情.如果要IDE能够自动补全代码,那将为我们编程人员带来很大帮助. eclipse代码里面的代码提示功能默认是关闭的,只有输入“. ...

  2. eclipse/myeclipse 变量名自动补全问题

    原理是:在输入变量名后,去掉按下空格或=后,代码上屏  以前只知道alt+/调出assist,后来发现可以所有字母都激活content assist(8.1里有写).用起来果然很爽,但是eclipse ...

  3. Eclipse变量名自动补全问题 自定义上屏按键为TAB

    Eclipse空格等号等都可以上屏,这样有时候输入变量名再按空格就会自动补全,非常讨厌.那么怎么办呢? 1.首先你的Eclipse需要装有 Eclipse plug-in development en ...

  4. Eclipse点击空格总是自动补全代码怎么办,如何自动补全代码,代码提示

    Eclipse点击空格总是自动补全不想要的代码说明大家配置的时候出现了一点错误,下面的步骤将会解决它, 网上部分经验需要大家更改代码非常繁琐,下面是一个简单的步骤方法 步骤一:打开eclipse依次点 ...

  5. Eclipse中输入变量会自动补全上屏的解决方法

    我自己在启动Eclipse代码补全后输入感觉确实爽多了,但是每次输入变量后一按下空格,编译器会自己帮你写一个很蛋疼的名字,比如你输入了:String mStr后按下空格,它就变成了mString,十分 ...

  6. idea中scala语言自动补全变量的同时,也自动补全类型

    IDE是IDEA,scala中,在new一个对象时,通过快捷键ctrl + Alt + V自动补全变量,但是我还想自动补全变量的类型,就像图中所示,在Specify type前面自动帮你打勾. 可以按 ...

  7. phpmyadmin 主机名自动补全

    2015年2月9日 14:29:25 新安装的phpmyadmin在登录界面中, 主机名的输入框没有自动补全功能, 导致每次都得手动输入ip地址 找到 phpmyadmin/libraries/aut ...

  8. Eclipse编写代码时代码自动补全 + 防止按空格自动补全

    都知道Eclipse中的自动补全代码是一个非常好用的工具 如下: 1.Windows——>Preferences——>Java–>Editor–>点击Content Asist ...

  9. vim中设置Python自动补全

    转自:http://blog.csdn.net/wangzhuo_0717/article/details/6942428 在VIM里面增加python的autocomplete功能的做法如下: 1. ...

随机推荐

  1. 20155301 Exp9 Web安全基础

    20155301 Exp9 Web安全基础 1.实验后回答问题 (1)SQL注入攻击原理,如何防御 答 :原理: 利用现有应用程序,将恶意的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web ...

  2. EZ 2018 03 23 NOIP2018 模拟赛(五)

    链接:http://211.140.156.254:2333/contest/65 这次Rating重回Rank18,我是20的守门员(滑稽) 这次题目和数据普遍偏水,我T2打错了一个变量名竟然过了所 ...

  3. mfc CString,string,char* 之间的转换

    知识点: CString转char*,string string转char*,CString char* 转CString,string 一.CString转char*,string //字串转换测试 ...

  4. springboot @PropertySource

    @ConfigurationProperties(prefix="person") 默认加载全局配置文件 application.properties或application.ym ...

  5. 深入理解docker信号机制以及dumb-init的使用

    一.前言 ● 容器中部署的时候往往都是直接运行二进制文件或命令,这样对于容器的作用更加直观,但是也会出现新的问题,比如子进程的资源回收.释放.托管等,处理不好,便会成为可怕的僵尸进程 ● 本文主要讨论 ...

  6. 人类又被AI碾压,这次是星际争霸

    还记得2017年,那个血洗围棋界的“阿尔法狗”吗?     这个由谷歌旗下 DeepMind 公司开发的 AI ,对阵世界顶尖围棋选手,打出完全碾压式的战绩: AlphaGo vs. 樊麾 - 5 : ...

  7. M1事后分析报告

    在得到M1团队成绩之后,每个团队都需要编写一个事后分析报告,对于团队在M1阶段的工作做一个总结. 请在2015年11月24日上课之前根据下述博客中的模板总结前一阶段的工作,发表在团队博客上,并在课上的 ...

  8. 《Linux内核分析》 第六周

    <Linux内核分析> 第6周 一.进程的描述 1.进程控制块PCB 2.linux下的进程转化图 TASK_RUNNING可以是就绪态或者执行态,具体取决于系统调用 TASK_ZOMBI ...

  9. ElasticSearch 2 (13) - 深入搜索系列之结构化搜索

    ElasticSearch 2 (13) - 深入搜索系列之结构化搜索 摘要 结构化查询指的是查询那些具有内在结构的数据,比如日期.时间.数字都是结构化的.它们都有精确的格式,我们可以对这些数据进行逻 ...

  10. beta 圆桌 6

    031602111 傅海涛 1.今天进展 接口微调修正 2.存在问题 文档转化太久 3.明天安排 完成全部接口的交互 4.心得体会 文档转化需要好好优化 031602115 黄家雄 1.界面优化 2. ...