.emacs.el之艺术

Vim、Emacs配置和使用
回复
头像
juanzhewudi
帖子: 1114
注册时间: 2006-01-19 11:55
来自: HUST
联系:

.emacs.el之艺术

#1

帖子 juanzhewudi » 2008-07-20 23:42

前段时间台机废了,可怜我的.emacs和site-lisp没有迁移到本子里,真是痛苦。还好小zhanzhan在论坛ftp上留了个打包好的emacs23,免却了fix编译依赖的痛苦,不过从头来再做一次.emacs的痛苦是免不了了,这时看到了地狱兰兰的一个.emacs.el的配置,真是绝了,自己稍微学习了一下,分享给大家。
大家都知道,当emacs的mod多了的时候,管理一个.emacs文件就成为了一件让人头痛的事情,如何解决这问题呢?兰兰给了我们一个美妙的思路:模仿apache的mods管理方式。 debian系的apache打包中,往往将各个模块的载入设置文件放入mods-available中,而通过软链接连到mods-enable中,同时在apache.conf中设置载入mods-enable中所有的文件,这样就可以方便用户随时添加删除mods了。要在emacs上实现这一点是十分简单的,看.emacs.el文件吧:
;;emacs loading file
;;classfoo<[email protected]>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;define the place to put modes;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq emacs-d "~/.emacs.d/")
(setq site-lisp (concat emacs-d "site-lisp/"))
;;;;;;;;;;;;;;;;;;;;
;;lod all the mods;;
;;;;;;;;;;;;;;;;;;;;
(setq mods-dir (concat emacs-d "mods-enabled"))
(mapc 'load(directory-files mods-dir t "\\.el\\'"))
;;;;;;;
;;end;;
;;;;;;;
在你的.emacs.d中建立两个文件夹,mods-available和mods-enabled,然后如上设置你的.emacs.el,使得其在载入的时候通过正则匹配mods-enabled中的所有.el结尾的文件,这样,所有的mod配置文件就能一一载入了。
~/.emacs.d$ ls
auto-save-list mods-available mods-enabled settings site-lisp
好,现在让我们来配置一个mod,就拿eim来作为例子吧。eim是一个emacs下的中文输入法,下载eim后,将其内容拷贝到.emacs.d/site-lisp中,
~/.emacs.d/site-lisp$ ls
autoconf emacs-goodies-el mule-ucs sdcv
browse-kill-ring erc prolog-el subdirs.el
debian-startup.el festival.el psvn w3m
dictionaries-common js2 pymacs wikipedia-mode
ecb line-number pymacs-elisp
eim msf-abbrev.el python-mode
这时,在.emacs.d/mods-available中建立一个文件02-eim-mode.el,注意,这里头部的数字是有作用的,通过数字的大小可以控制正则匹配时的先后顺序,实现mod载入顺序的设置.eim是个比较重要的mod,所以,编号靠前...
~/.emacs.d/mods-available$ ls
00-emacs-main.el 02-eim-mode.el 10-mediawiki-mode.el
01-linenumber-mode.el 05-browse-kill-ring-mode.el 99-emacs-theme.el
其内容如下,和正常的.emacs文件中的设置没什么两样,不过是集中到了一个文件中,方便维护
~/.emacs.d/mods-available$ cat 02-eim-mode.el
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;settings of the eim chinese input method;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq inhibit-startup-message t)

(setq eim-path (concat site-lisp "eim/"))

(setq default-major-mode 'text-mode)

(fset 'yes-or-no-p 'y-or-n-p)

(add-to-list 'load-path eim-path)

(autoload 'eim-use-package "eim" "Another emacs input method")

(register-input-method
"eim-wb" "euc-cn" 'eim-use-package
"五笔" "汉字五笔输入法" eim-path)

(register-input-method
"eim-py" "euc-cn" 'eim-use-package
"拼音" "汉字拼音输入法" (concat eim-path "py.txt"))

;;eim settings
(add-hook 'eim-py-load-hook
(lambda ()
(let ((map (eim-mode-map)))
(define-key map "," 'eim-previous-page)
(define-key map "." 'eim-next-page))))
(setq default-input-method "eim-py")
这样,在mods-available中就有了一个载入eim的配置文件了,为了使得这个文件生效,把它软链接到mods-enabled中就可以了。

这只是兰兰的.emacs.el中的冰山一角,还有其他的更牛的内容,请参见:
http://www.emacs.cn/DotEmacs/HellwolfDotEmacs

再次向兰兰致敬
头像
zhan
帖子: 1880
注册时间: 2005-08-15 0:04
来自: 南7技校

#2

帖子 zhan » 2008-07-23 14:00

真是火星来的。。。。
飞得高,飞得低,学习再学习,多少大秘密!
http://zhan.blog.ubuntu.org.cn
头像
juanzhewudi
帖子: 1114
注册时间: 2006-01-19 11:55
来自: HUST
联系:

#3

帖子 juanzhewudi » 2008-07-23 20:14

zhan 写了:真是火星来的。。。。
:twisted:
头像
juanzhewudi
帖子: 1114
注册时间: 2006-01-19 11:55
来自: HUST
联系:

#4

帖子 juanzhewudi » 2008-07-23 20:14

人家骗点专家分容易么,别拆穿
回复