先说下以前的配置, 在根目录的.emacs里, 简单粗暴地写上如下几句, 大意是设置加载文件位置, 调用三个OCaml的插件 - 都在tuareg文件夹了.
~/.emacs
- (add-to-list 'load-path "DIR")
- (require 'tuareg)
- (require 'ocamldebug)
- (require 'tuareg_indent)
- (setq auto-mode-alist (cons '("\\.ml\\w?" . tuareg-mode) auto-mode-alist))
- (autoload 'tuareg-mode "tuareg" "Major mode for editing Caml code" t)
- (autoload 'camldebug "camldebug" "Run the Caml debugger" t)
然后现在这样就不好使了, 我的文件结构更新如下了,
~/.emacs.d/
init.el #Emacs会自动从init.el开始执行
elpa/ #通过ELPA下载的插件所保存的位置
lisp/ #就是加载各个插件的初始化文件的位置啦
init-xxx.el #某初始化文件,如init-sql.el
.....
以前的.emacs单一文件被init.el初始化文件代替, 其中require lisp/目录下的具体的插件配置. 相应的, 为了配置OCaml编译环境, 我应该在init.el里加入 (require 'init-ocaml), 然后在lisp/文件夹下新建init-ocaml.el空白文件, 填补上如下代码.
;;~/.emacs.d/lisp/init-ocaml
(add-to-list 'load-path
(expand-file-name "lisp/tuareg" user-emacs-directory))
(require 'tuareg)
(require 'ocamldebug)
(require 'tuareg_indent)
(setq auto-mode-alist (cons '("\\.ml\\w?" . tuareg-mode) auto-mode-alist))
(autoload 'tuareg-mode "tuareg" "Major mode for editing Caml code" t)
(autoload 'camldebug "camldebug" "Run the Caml debugger" t)
(provide 'init-ocaml)
也是设置load-path, 注意我们的OCaml配置文件不仅仅只有tuareg.el, ocamldebug.el, tuareg_indent.el这三个, 其背后依赖的是一个名为tuareg的package, 将其整体放进lisp文件夹中即可.
好了, 大功告成, 打开熟悉的.ml后缀文件, 语法高亮, tuareg插件全部都回来啦, 开心!
同时, 我有另外一个疑问, 这里调用的Package是我自己复制粘贴进去的, 与elpa包管理器下载的有什么区别呢? 仔细看了下文件结构, 我有些明白了,
~/.emacs.d/
init.el #Emacs会自动从init.el开始执行
elpa/ #通过ELPA下载的插件所保存的位置
tadauto-complete-20160310.2248/ lisp/ #就是加载各个插件的初始化文件的位置啦
init-xxx.el #某初始化文件,如init-sql.el
tuareg/
重新祭上文件结构, lisp里的init - xxx.el配置文件配置了插件,require等, 其中包括epla信息, 故插件包都会通过epla管理下载在elpa/文件夹里. 本篇文章中, 我是手动下载并配置了插件包, 绕过elpa, 将其放进lisp文件夹里. 在Emacs24以后, elpa的引入极大地实现了配置文件的轻量化, 传统的(可能会庞大的)插件包不需要备份, 换电脑换设备Emacs初始化时会自动执行下载elpa的命令, 下载最新的插件包. 这里边的学问还是很大呢.
不说了, 赶工OCaml编译器去了.