本人只懂一些elisp的皮毛,并没有真正学习过elisp.所以本文所述方法实质并非通过分析Auto-complete的代码所得.所以我也说不出什么原理来.不过,至少我可以告诉你,我如下这样的配置中,本文所述方法有效.
GNU Emacs 24.3.1
jdee-2.4.1
auto-complete-1.5.0
auto-complete与jdee的安装及其本设置,这里就不再冗述了.这里只提醒一下,auto-complete的配置应该在jdee前.
一 Auto-Complete弹不出补全的选择窗口
基本配置都写到.emacs文件后.我遇到了第一个问题,Auto-Complete弹不出补全的选择窗口.该问题的解决方法,我在stackoverflow上找到了:
http://stackoverflow.com/questions/11715296/emacs-auto-complete-dont-work-with-jde
简单来说,解决方法就是在jdee的配置中加入 (push 'jde-mode ac-modes) 这一句,如下:
(add-to-list 'load-path (concat jdee-full-path "/lisp"))
(require 'jde)
(push 'jde-mode ac-modes)
这样弹不出补全的选择窗口就解决了.我认为问题的成因在于:JDEE运行在jde-mode上,而auto-complete的默认并没有监听jde-mode,所以会有弹不出补全的选择窗口的问题.现在向监听列表ac-modes追加上jde-mode,因而问题解决.
二 java-mode这个dictionary文件没有生效
举个例子,我想在某个新的Java源文件中定义第一个类.当我输入"pub"时,自动弹出的Auto-Complete选择窗口却没有"public"这个选项.除非我在文件的其它地方已经输入了一个"public",这样才会有"public"这个选项出现在Auto-complete选择窗口.我知道Auto-complete中与Java相关的补全词是定义在 [Auto-Complete工程根目录]/dict/java-mode 文件中的.所以该文件中找了几个词试了试,结果都有上述问题.因为不懂elisp的调试,这个问题折腾了我好久.后来,抱关试一试的心态,作了如下的操作:备份原来的java-mode文件,然后把java-mode的文件名改为jde-mode.结果,问题解决了.
我认为问题的成因在于:JDEE运行在jde-mode上,而java-mode文件中的数据只会在java-mode生效时才会导入.一言概之,Auto-Complete在什么[***]-mode下,就会导入[***]-mode文件中的数据.所以新增一个jde-mode文件即可解决问题.