之前也一直在用Emacs工具进行程序代码的编写工作,但是只是对Linux环境下的这个工具进行了相应的配置工作,在Windows下只是用其最精简的版本,也没有安装什么相关的插件。前几天越用越感觉不方便,与其这样用Emacs,还不如用UltraEdit或者其他的一些工作,生发了要对Windows7环境下的Emacs安装相应的插件,实现和VS同样的功能,废话到此,开始安装配置工作。
一、需要的插件
Emacs: Emacs-24.3版本 可以到GNU的官网自行下载
CEDET: CEDET-1.1版本 可以到Github上或者Sourceforge自行下载
ECB: ECB-2.40版本 可以到Github上或者Sourceforge自行下载
二、安装
2.1 安装Emacs工具
该工具不用安装,只要将下载来的压缩包解压缩即可,放在你自己的目录中。运行后,会在用户目录下产生.emacs文件,和.emacs.d的文件夹,我的具体在C:/users/AppData/Roaming/(至于为什么是这个目录我也一直没有找到答案)目录下。如果在这个目录下没有,可以自己创建一个文件,注意,这个文件是隐藏的,要想显示就要把隐藏文件打开才行。这个.emacs就是配置Emacs的文件;
2.2 安装CEDET插件
2.2.1 编译插件
下载来的这几个插件都是压缩包的形式,将压缩包放在.emacs.d中,自己可以创建一个专门用来安装插件的文件夹,如我自己创建的是plugin。将压缩包拖到这个文件夹下,进行解压,这个插件在安装到Emacs中之前是需要编译的。
$ cd ./plugin/cedet-1.1
$ make
这个地方需要注意,很有可能make之后编译通不过,有各种因素导致而成。如果碰到不能编译通过的情况时不用着急,可以先尝试清除之前编译出错的痕迹:
$ make clean-autoloads
$ make clean-all
然后尝试执行:
$ make ebuild
这个编译目标可以顺利通过。
在这个编译过程中,可能会碰到一个问题,会提示:
Warning: cedet-called-interactively-p called with 0 arguments, but requires 1
如果碰到这个问题,可以这样解决:打开Emacs的配置文件.emacs,在对cedet搜索路径前,添加一句:
(setq byte-compile-warnings nil)
编译过程中还会碰到另外一个问题,会弹出如下的提示:
Symbol's value as variable is void: stack-trace-on-error
此时,可以在添加前一个清除编译警告的后面再添加一句:
(setq stack-trace-on-error t)
2.2.2 配置CEDET插件到Emacs配置文件中
用任何一个文本编辑器打开前面创建的.emacs文件,将Cedet的路径添加到Emacs搜索路径中:
;; Configuration for CEDET plugin
(add-to-list 'load-path "~/plugin/cedet-1.1/common")
(load-file "~\\plugin\\cedet-1.1\\common\\cedet.el")
(global-ede-mode 1)
(semantic-load-enable-code-helpers)
(global-srecode-minor-mode 1)
这儿需要注意,如果出现无法打开load-file: cedet.el,最好用绝对路径。如我的:
(load-file "D:\\TDDOWNLOAD\\emacs-24.3\\site-lisp\\install\\cedet-1.1\\common\\cedet.el")
2.3 安装ECB插件
2.3.1 编译ecb插件包
ECB插件是Emacs中用来浏览代码的一个插件。下载后,也是需要编译下的。
$ cd ./ecb-2.40
ECB的编译较麻烦些,因为如果你直接在命令行中敲make时,会提示打不开/common/cedet.el,因为ECB是依赖前一步安装的cedet,所以这个安装顺序不能搞反,一定要先安装cedet。
此时,你进入到ecb-2.40的目录中,打开该目录下的Makefile文件,看到其中第51行处有一个变
# -------- Compiling ECB with the cedet-library 1.0 ----------------------
# cedet >= 1.0 (contains a.o. semantic >= 2.0, eieio >= 0.18 and speedbar
# >= 0.15). Set here the full path to the cedet-installation directory.
CEDET=/cygdrive/d/TDDOWNLOAD/emacs-24.3/site-lisp/install/cedet-1.1
# You can set here more load-paths to arbitrary packages if you want. But
# this is really not necessary!
LOADPATH=##D:\TDDOWNLOAD\emacs-24.3\site-lisp\install\ecb-2.40
量“CEDET”,之前失败是因为没有对这个变量进行正确的指定,这个变量表示的就是你之前安装cedet1.1的目录。这个非常重要,否则是编译不过的。将CEDET=后面的内容替换为你安装cedet1.1的绝对地址,我的如下:
CEDET=/cygdrive/d/TDDOWNLOAD/emacs-24.3/site-lisp/install/cedet-1.1
因为我是在Cygwin下编译的。如果不想自动加载ecb插件的话,可以将下面LOADPATH变量留空,不赋任何值。此时,就可以编译了。在这,指定目录位置时的书写方式很重要,不像我们在windows下的书写方式,D:/path/to/install,将“:”省略了,全部都用“/”代替。如果编译时总是提示无法打开……/common/cedet.el,就说明你的目录没有指定正确。
2.3.2 配置ecb
添加搜索路径:
(add-to-list 'load-path "D:\TDDOWNLOAD\emacs-24.3\site-lisp\install\ecb-2.40")
打开相应的模式:
(require 'ecb)
(require 'ecb-autoloads)
(setq ecb-auto-activate t
ecb-tip-of-the-day nil)
此时,可以保存.emacs配置文件,从任何地方启动Emacs,然后从菜单中选择"tool->start code browser",可能会弹出如下的提示:
error: ECB 2.40 - Error: ECB can only be used with
cedet [1.0pre6, 1.0.9]! Please install it and restart Emacs!
表示ecb-2.40不支持cedet-1.1,此时,需要修改一下ecb插件目录下的"ecb-upgrade.el",用文本编辑器打开该文件,将
(defconst ecb-required-cedet-version-max '(1 0 4 9))
修改为
(defconst ecb-required-cedet-version-max '(1 1 4 9))
并且将该文件中的1169-1180之间的代码注释掉,不让他进行版本检查:
;; check if vedet-version is correct
;; (when (or (not (boundp 'cedet-version))
;; (ecb-package-version-list<
;; (ecb-package-version-str2list cedet-version)
;; ecb-required-cedet-version-min)
;; (ecb-package-version-list<
;; ecb-required-cedet-version-max
;; (ecb-package-version-str2list cedet-version)))
;; (setq version-error (concat "cedet ["
;; cedet-required-version-str-min
;; ", "
;; cedet-required-version-str-max
;; "]")))
此时,再利用同样的命令进行编译。
编译通过后,还有一件非常重要的事,一定要对Emacs的配置文件.emacs进行byte-compile一次,即用Emacs打开.emacs文件,按M-x,输入byte-compile-file,然后输入.emacs,即要编译的文件,回车,将配置文件编译一次,这样才能保证一些选项是可用。我之前就没有做这项工作,导致总是提示部分工作不能顺利往下走。此时,如果还有需求,可以根据这两个插件目录下的相关文件介绍进行配置。