﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-弱水既西-随笔分类-Eclipse</title><link>http://www.blogjava.net/greatyuqing/category/53061.html</link><description>鸿毛不浮，鬼神难渡。</description><language>zh-cn</language><lastBuildDate>Wed, 09 Jan 2013 03:33:38 GMT</lastBuildDate><pubDate>Wed, 09 Jan 2013 03:33:38 GMT</pubDate><ttl>60</ttl><item><title>修改Eclipse与MyEclipse的代码提示功能</title><link>http://www.blogjava.net/greatyuqing/archive/2012/11/29/392226.html</link><dc:creator>弱水</dc:creator><author>弱水</author><pubDate>Thu, 29 Nov 2012 12:11:00 GMT</pubDate><guid>http://www.blogjava.net/greatyuqing/archive/2012/11/29/392226.html</guid><wfw:comment>http://www.blogjava.net/greatyuqing/comments/392226.html</wfw:comment><comments>http://www.blogjava.net/greatyuqing/archive/2012/11/29/392226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/greatyuqing/comments/commentRss/392226.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/greatyuqing/services/trackbacks/392226.html</trackback:ping><description><![CDATA[本文的目的是修改Eclipse与MyEclipse的代码提示功能，使之能够更加快速的帮助程序员编写代码。<br />
<div><br />
本文使用的Eclipse版本为4.2 JUNO，MyEclipse的版本为10.6。</div>
<br />
<br />
1. 设置代码自动完成提示的触发键<br />
依次点击Window--&gt;Preferences--&gt;Java--&gt;Editor--&gt;Content Assist：<br />
<br />
<img src="http://www.blogjava.net/images/blogjava_net/greatyuqing/配图/img1jpg.jpg" alt="" border="0" height="347" width="408" /><br />
<br />
<img src="http://www.blogjava.net/images/blogjava_net/greatyuqing/配图/img2.jpg" alt="" border="0" height="686" width="742" /><br />
<br />
"Auto activation triggers for Java" 指定当按下什么键时，会弹出代码提示。按照自己习惯配置即可，我的配置是".abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ([{,"。<br />
<br />
较早版本的Eclipse与MyEclipse在这里最多只能指定5个键，想要指定更多的键，只能使用先导出配置文件，修改之后再导入的方法。具体方法可参考：<a href="http://hi.baidu.com/umltlgdcbsbilzd/item/aeb086202e194fc9a4275a67">http://hi.baidu.com/umltlgdcbsbilzd/item/aeb086202e194fc9a4275a67</a><br />
<br />
"Auto activation delay (ms):" 这个值指定当按下相应的触发键后，延迟多少毫秒弹出代码提示。建议设置为100以下，否则会有明显的停顿感。<br />
<div><br />
<br />
2. 取消空格上屏<br />
</div>
使用Eclipse与MyEclipse的代码提示功能时，按下空格键后Eclipse会自动将代码提示中的第一项上屏。这一点有时会变得相当讨厌，因为很多时候我们只是单纯的想要输入一个空格而已。然而这一特性是无法通过配置改变的。好在Eclipse是开源的，我们仍然可以通过修改相应的源代码来改变这一点。<br />
<br />
下面先以Eclipse为例说明。<br />
<br />
首先，如果你下载的Eclipse是SDK版本的，那么可以直接越过下面的一段。<br />
<br />
如果你的Eclipse不是SDK版本的，强烈建议你改为使用SDK版本的Eclipse，因为SDK版的Eclipse附带了所有源码。如果你不愿意使用SDK版，那么也可以从<a href="http://www.eclipse.org/projects/listofprojects.php">http://www.eclipse.org/projects/listofprojects.php</a>获得下文所需的源代码，以本文为例，点击Platform Text，会跳转到project页面，再点击Clone on GitHub，即可下载到相应的源代码。<br />
<br />
依次点击Window--&gt;Show View--&gt;Other...，在弹出的对话框中再选择Plug-in Development--&gt;Plug-ins：<br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/greatyuqing/配图/img3.jpg" height="519" width="558" /><br />
<br />
<img src="http://www.blogjava.net/images/blogjava_net/greatyuqing/配图/img4.jpg" alt="" border="0" height="449" width="347" /><br />
<br />
在Plug-ins中找到org.eclipse.jface.text，点击右键，选择Import As--&gt;Source Project：<br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/greatyuqing/配图/img5.jpg" height="389" width="829" /><br />
<br />
这时eclipse就会把该项目导入到你的workspace中了。展开该项目，在src目录中选择org.eclipse.jface.text.contentassist.CompletionProposalPopup.java文件：<br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/greatyuqing/配图/img6.jpg" height="413" width="352" /><br />
<br />
在该文件中找到如下的代码：<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">\t</span><span style="color: #000000; ">'</span><span style="color: #000000; ">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.doit</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fProposalShell.setFocus();<br />
</span><span style="color: #0000FF; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;</span></div>
<br />
将其改为：<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">\t</span><span style="color: #000000; ">'</span><span style="color: #000000; ">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.doit</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insertSelectedProposalWithMask(e.stateMask);<br />
</span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break</span><span style="color: #000000; ">;</span></div>
<br />
然后，在这段代码的下方，找到如下代码：<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(contains(triggers,&nbsp;key))&nbsp;{<br />
&nbsp;&nbsp;&nbsp; e.doit</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp; hide();<br />
&nbsp;&nbsp;&nbsp; insertProposal(p,&nbsp;key,&nbsp;e.stateMask,&nbsp;fContentAssistSubjectControlAdapter.getSelectedRange().x);<br />
}</span></div>
<br />
将其第一行改为：<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(key&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0x20</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;key&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">=</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;key&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000;">&nbsp;contains(triggers,&nbsp;key))&nbsp;{</span></div>
<br />
经过以上修改，我们去掉了按下空格上屏的功能，并将其改为按下Tab键上屏，相信这是符合多数人的习惯的。<br />
<br />
保存修改。接下来要做的就是使用修改过的代码生成插件，并替换掉Eclipse本来的插件。在该工程上单击右键，选择Export...：<br />
<br />
<img src="http://www.blogjava.net/images/blogjava_net/greatyuqing/配图/img7.jpg" alt="" border="0" height="482" width="511" /><br />
<br />
<div>在弹出的对话框中选择Plug-in Development--&gt;Deployable plug-ins and fragments，点击Next：</div>
<img src="http://www.blogjava.net/images/blogjava_net/greatyuqing/配图/img8.jpg" alt="" border="0" height="497" width="472" /><br />
<br />
<div>指定一个保存即将导出的jar包的位置，点击Finish。</div>
<img src="http://www.blogjava.net/images/blogjava_net/greatyuqing/配图/img9.jpg" alt="" border="0" height="634" width="555" /><br />
<br />
这时，在你刚才指定的路径下会生成一个plugins文件夹，里面就是导出的jar包：<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/greatyuqing/配图/img10.jpg" height="187" width="457" /><br />
<br />
最后一步，定位到Eclipse安装目录下的plugins文件夹，使用这个刚生成的jar包替换掉原本的org.eclipse.jface.text包即，大功告成！<br />
<br />
现在，使用代码提示时按下空格键已经不会自动上屏了，而是使用Tab键来上屏。<br />
<br />
MyEclipse的修改方法与Eclipse完全一样，用修改好的jar包替换掉MyEclipse自带的jar包即可，MyEclipse中该jar包的位置是：MyEclipse安装目录\Common\plugins。<br />
<br />
需要额外注意的是MyEclipse中使用的org.eclipse.jface.text包的版本。如笔者使用的MyEclipse 10.6的jface.text的版本是3.7.2，而Eclipse Juno使用的jface.text版本为3.8.1。笔者试图用修改过的3.8.1版本的jar包替换掉MyEclipse自带的3.7.2的jar包，发现替换后的MyEclipse无法启动。无奈只能从网上重新下载了3.7.2版本的Eclipse SDK，将里面的jface.text修改好之后替换道MyEclipse中，最终解决了问题。
<br />
<br />
<br />
<table>
     <tbody>
         <tr>
             <td>
             <a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/cn/"><img alt="知识共享许可协议" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-nd/3.0/cn/88x31.png" /></a>
             </td>
             <td>
             &nbsp;&nbsp;本<span xmlns:dct="http://purl.org/dc/terms/" href="http://purl.org/dc/dcmitype/Text" rel="dct:type">作品</span>采用<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/cn/">知识共享署名-非商业性使用-禁止演绎 3.0 中国大陆许可协议</a>进行许可。
             </td>
         </tr>
     </tbody>
</table>
<img src ="http://www.blogjava.net/greatyuqing/aggbug/392226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/greatyuqing/" target="_blank">弱水</a> 2012-11-29 20:11 <a href="http://www.blogjava.net/greatyuqing/archive/2012/11/29/392226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>