我的 emacs 配置文件夹

Vim、Emacs配置和使用
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

我的 emacs 配置文件夹

#1

帖子 kardinal » 2011-10-21 14:18

好常时间没有来了……这个账户竟然还能正常使用 :em11

发一个我最近的配置文件

https://github.com/ran9er/init.emacs/tarball/master

把里面的 site-start.el 复制到 site-lisp 这个文件夹里面,这个文件无毒副作用,即便没有找到名字中包含 init & emacs 的目录也不会报错,请放心使用(如果多个目录名称中都包含 init & emacs 字样,则使用最新的)

这个文件夹在哪里?

/usr/share/emacs/site-lisp …… 差不多吧,我只是凭印象……
在 windows 平台下面就是 emacs 的一个子目录……所以 windows 下在 emacs 是真正的便携版,用不用的都在 U盘里放一个吧

当然,你也可以把 site-start.el 改成 .emacs …… 如果你非得这么做

不过得提醒你的是, site-start.el 在 .emacs 之前读取,也就是说,你在 .emacs 临时作点改动,启动后是生效的
上次由 kardinal 在 2011-12-04 16:48,总共编辑 9 次。
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: 我的 emacs 配置文件夹

#2

帖子 kardinal » 2011-10-21 14:19

site-start.el 把 init.emacs 目录里所有下划线开头的文件夹加入到 load-path ,然后读取所有以el 结尾的文件

对于一些必然会用到的,比较大的扩展,单独建一个子目录,并以下划线开头,比如我的有 _color-theme _eshell

对于有时用有时不用的,像 auto-complete yasnippet 这些,由它们自己的配置文件加 load-path 就好了

对于一些零碎的小插件,我建立了一个 _misc 目录,统统扔到那里面去,还有一个 _test 目录……你想试用某些扩展的时候,可以放在这里面,免得记不清楚最后弄的一团乱糟糟的

还有一个 _autoload 目录,这里面的 el 文件也是直接读取的,比如我有一个小函数,放在其它文件里占地方,分离出来了,但是用的时候 require 吧又挺麻烦,那就放到 _autoload 里好了

而文件用数字开头,精确的控制它们的加载顺序……虽然大部分的文件启动早一点晚一点没有什么影响,但是有影响的情况也不能完全避免……而且这样看起来比较壮观

这些文件分割的基本准则是,如果你不想用到这方面的功能了,只要简单的改下名,相关的设置全部禁用掉。所以前面提到的,auto-complete yasnippet 由它们自己的配置文件加 load-path,就是这个原因。不想用了,直接到 dired 模式里面,在 12_auto-complete.el 上面按下 b 键,下次就禁用了,连 load-path 也不会加到 list 里面。
(可能直接按 b 没用,我写了个蛋疼的函数干这件事,在 dired.el 这个文件里面)

我的 00_func 和 01_init 文件基本是要在前面读取的

func 里面定义了几个小函数,像 def-key-s ,后面的文件会用到 …… 用这个定义键绑定比较简单,主要是一次可以定义很多

代码: 全选

(def-key-s 0
  "M-j" 'tabbar-backward-tab
  "M-k" 'tabbar-forward-tab
    )
……讲到这个文件的时候再说吧
上次由 kardinal 在 2011-10-21 14:54,总共编辑 5 次。
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: 我的 emacs 配置文件夹

#3

帖子 kardinal » 2011-10-21 14:19

ok,这层讲 site-start 文件,里面是一些基础的东西,高手自动GFW

代码: 全选

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(unless (boundp 'init-name);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
这个文件的内容都在这里面
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
其实这个 unless 是不必要的,只是因为我一股脑把 site-start.el 和其它文件都放在 init.emacs 里面,用的时候,cp 一个到 site-lisp 里面。因为 site-start.el 读取的是 init.emacs 这个文件夹,而 site-start.el 又在这个文件夹里面……所以,site-start.el 必然会读到 site-start.el ,这个 site-start.el 又开始读取 init.emacs ,然后读到 site-start.el ,然后……你懂的

boundp 判断一个符号有没有绑定(符号……我还是说变量吧),而加载过 site-start.el 后,这个变量就被绑定了,所以读到这里下面的就不会继续执行了

说点题外的,其实你看懂了 (unless (boundp 'init-name)(…………)) ,也就能看懂大部分的lisp表达式了,和算术表达式差不多 (((1+2)*3)+(4/(5-6))),一层层嵌套,最里面的括号先求值。不过 lisp 是前缀表达式,运算符在前面,上面的式子在lisp里面应该是 (+ (* (+ 1 2) 3)(/ 4 (- 5 6)))……这个式子你拿到 emacs 里面真的可以求值,复制到scratch 那个缓冲区,在最后那个括号处 C-x C-e……当然你会说,不用这么麻烦,我心算就可以得出结果,好吧,那个问题离咱们太远……

因为运算符在最前面,所以括号里面的第一部分不求值,而对后面的部分(参数)求值。(当然这只是elisp的情况,其它lisp不一定是这样,不过那些太远,和我们没有半毛钱的关系不是吗?)unless 和 boundp 这些函数和 +-*/ 其实都是一种玩意儿(你可能会认真的说,unless 是个宏……好吧,咱先不扯那么远好吧?)

以上两段针对无聊的新手,因为关注这个帖子的都是 emacser ,这些基本的东西应该都会,那些不知道 emacs 和 lisp 的新手,只有无聊到一定程度才会来看这个帖子

unless 里面有两个部分,一个是setq,另一个是add-hook。

setq 是一个特殊结构……可能是因为它像是一个宏,但又是用 c 写的缘故吧…… 它可以一次设置很多个变量,就是把第135(奇数说起来拗口,就用135,246代替吧)个参数的值,设置成第246个参数。说它像是宏,因为它里面的第135个参数都不用加 ' 单引号(所以正常情况下,一般的参数都是要加引号的)

在setq 这个过程还没开始之前,如果正常求值的话,init-name 没有值的情况下会报错,单引号的作用就是这次不求值,下回再说。当然,setq 比较二,不管135,只管246 。

"init.emacs" 是一个字符串,它也没有加单引号,但是双引号怎么也能当两个单引号使不是……而且更是发挥1+1>2 的作用,能顶无数个单引号……其实字符串无论求多少次值都还是字符串,这说明它是一个原子……通过了 elisp 权威的最圆原子认证,你可以通过以下方式查询:(atom "xxx")

t 表示真,nil 表示假 () = nil ,其它的都是 t

其实 emacs 大部分的配置是通过 setq 把一个变量设置为你需要的值,控制 emacs 的各种行为,而 setq
里面又有很大一部分是把变量设置成 t 或者 nil ,比如说 inhibit-startup-message ,设置成t,显示启动画面,设置成 nil ,禁用启动画面,其实简单的跟 1 一样。

site-start.el 里面用 setq 设置了 6 个变量,第一个变量设置了 init-dir 的名字,然后根据系统的不同设置 init-dir 的路径,文件夹的名字都叫 init-name ,这个你可以自己改。。。

init-load-path 的值是 nil,其实它一点作用没有,只是占个 135 中的位置而已

因为要先对它后面的表达式求出一个值才会赋值,虽然后面的表达式最终值是 nil ,不过重要的是副作用,也就是说,在求值的过程中,它把 init.emacs 目录下以下划线开头的文件夹加到 load-path 里了

init-files 的值就是所有通过 site-start.el 加载的文件,当然了,为了知道哪些文件被加载,后面的表达式不得不先把 init.emacs 目录里以 el 结尾的文件加载了一遍

还有两个变量是获取当前的时间,用来计算加载文件用了多长时间

而另外一个很重要的部分是设置 hook ,也就是说,发生某一特别事件的时候,执行特定程序。用贴近生活的话语讲,地震的时候,我们应该向地球提出严正抗议。

emacs-startup-hook 表示 emacs 启动完成之后干的事情。无非是用 message 显示一条信息,信息的内容是计算加载了多少个文件;前面的两个变量相减,得到加载目录里的文件用的时间;第一个时间和当前时间相减,得到启动用的总时间;不过这个总时间只有参考价值,因为emacs 初始化到开始读取配置文件,中间还有一段时间,一般在 1-2秒左右吧
上次由 kardinal 在 2011-10-21 16:46,总共编辑 4 次。
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: 我的 emacs 配置文件夹

#4

帖子 kardinal » 2011-10-21 14:19

func.el 这个文件里定义一些后面的文件会经常用到的函数

具体怎么定义也就不讲了,有时间我会写点elisp的新手感言什么的,但现在是emacs时间

其实里面用的最多的函数是 define-key-s 和 define-key-s 和 define-key-s ……搞错了,其中有一个是 def-key-s,不过也没什么区别,def-key-s 就是 define-key-s 包装了一下而已……

为什么在名字后面要加个 s 呢?因为别的版本的同样的函数,一般都偷懒的用二维表什么的,使用起来比较麻烦,而这个版本用的 stack……当然,对于lisp 来说不存在什么 stack 或者二维表什么的,你想它是什么它就是什么,关键看你怎么作……总之,我把麻烦留给了自己……
后来我发现这个函数很好用,好用到了 S 级,所以也就没改这个名字了

它们第一个参数都是一样的,0 1 或者 xxx-mod-map ,0 相当于 global-set-key , 1 相当于 local-set-key ,xxx-mod-map 这个嘛,当然就是 xxx-mod-map 了

define-key-s 和 def-key-s 的主要区别是,一个接受的参数是列表,另一个接受许多参数
接受列表参数的话,要多写几个符号 '() ,而 def-key-s 则不用这么麻烦,但是除了第一个 keymap 参数外的 246 参数前面要加单引号……所以如果定义的内容多的话,可能要多写几个单引号的说

……那你一定会问,有没有一个 def-k-s 的函数,既不用写括号,又不用写单引号?

……我承认我失败了,好吧……有!(这个原来的配置文件里面是没有的,是我临时想到的,想用自己加进去)

代码: 全选

(defmacro def-k-s(km &rest kd)
  (list 'define-key-s km `',kd))
不过由于这次是宏,所以要多一次展开的过程……如果你一次定义几万个键,就用 define-key-s 好了,要比这个快一倍以上(我试着用它绑定了十来个键,启动竟然足足慢了将近0.1秒,不应该啊),而且对于几万个字母来说,' ( ) 这三个字符并不算多

define-key-s 还有一个特殊的参数,也就是第三个参数,是个可选参数,用于定义一组同样命令的键绑定,类似 self-insert-command skeleton-pair-insert-maybe 之类的,第三个参数就是命令的名字

如果参数里面 135 比 246 多一个的话,那么最后一个键就是 unbind,你可以用它快速 unbind,比如说

代码: 全选

def-k-s 0 "C-a"
我要不要修改一下,把这三个合并成一个呢?原来那个根据别人的修改的,然后一直改来改去,越来越操蛋,看来得解决一下了
上次由 kardinal 在 2011-10-25 8:27,总共编辑 10 次。
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: 我的 emacs 配置文件夹

#5

帖子 kardinal » 2011-10-21 14:19

有同学会问,好像 init.el 里面的东西和 site-start.el 里面性质差不多啊?

因为 site-start.el 是一个全局文件,为了不影响别人,里面就不要写具体的设置了,这个 init.el 相当于你个人的初始化文件。这里面应该写一些相当基本的设置。比如说读取 autoload 下的文件 , 设定工作目录,find-file-hook,各种上限, 启动信息……呃……我发现我有个选项前后设置了两遍,不过还好,两次设置的都是同一个值 :em06 为了增加你的乐趣,我就不告诉你哪个选项设置重复了

safe-local-variable ,这个东西一般而言用不着。。。

我每次保存文件都是 utf-8-unix ,但是偶尔有个别文件打开的时候,编码老是识别错误,C-x r ret utf-8 再
C-x f ret ....是行了,但是回头打开的时候又乱了,而且时不时出现,没有规律,气也死我了……

于是我在每个文件头部加了一行

代码: 全选

;; -*- encoding: utf-8-unix; -*-
这个大约叫文件变量。这下世界终于清静了不少…… 不过每次启动的时候,会说这个文件变量不安全,让你选打开不打开。。。设置上这东东,就不会问你了

(setq help-xref-following nil) 我还设置了这个变量。。。我的emacs不知道哪根筋没搭好,有时候我要求点帮助,它老说 help-xref-following 未设置……我也搞不清楚哪里出了问题,因为也是出现的没有规律……所以我直接把这个变量设置成 nil ……有时候这也是一种解决问题的方法 :em09
上次由 kardinal 在 2011-10-21 18:39,总共编辑 1 次。
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: 我的 emacs 配置文件夹

#6

帖子 kardinal » 2011-10-21 14:19

(setq desktop-clear-preserve-buffers
(cons "\\*eshell\\*.*" desktop-clear-preserve-buffers))
这个是使用 desktop-clear 命令时保留的缓冲区

有的配置文件里会出现 (if t t 然后离很远还有一个 “)” ,当然,我用醒目的注释围起来了,不会搞混。
这个东西的作用是,有时候很长一段代码你不用了,但又不想注释掉,因为比较麻烦,而且如果在用版本控制的话,来来回回的改动太大了…… (if t t 。。。)里面的内容就不执行,如果想要它执行,(if nil nil )就可以了。其实取决于第一个参数,第二个参数无论是什么都无所谓,只是我觉得这样整齐点。或者你可以用 (when nil 。。。) 也可以,不过它是一个宏,如果里面的内容过长,会影响速度,甚至危及生命……一般来说,里面的代码最好不要超过10万行 :em06

好了,其它的差不多大家都知道,不知道的基本也能搜出来,我先说说最近比较感兴趣的吧,就是 eshell

前几天没事搜索的时候,看到坛子里的一位高手也用 eshell ,他的配置就挺全的,我和他基本差不太多,说说我的里面多出来的部分吧。

其中有个 auto-complete 在eshell里的补全,不过在 eshell 里用 ac-mode 其实挺操蛋的,所以我(if t t)了,可能我还没倒饬好,这个以后再说吧

(require 'eshell-user-key)
(require 'eshell-cmpl)
(require 'eshell-bmk)

user-key 就是我那套基本动作,我的 zsh 也是这样配置的,require 一下就直接绑定了 tab ret spc C-w 这几个键……因为我反复琢磨过,这几个功能绑定到其它键都不合适,如果你非要改的话,在 _eshell/eshell-user-key.el 里面改一下就可以了。

tab 是补全,如果是空行的话,自动填入 cd 和空格 ,如果你再输入一个空格然后 tab 的话,就变成 cd -0,接着你 tab 一次,这个数字加一次

空行 ret 直接 ls ,如果是 ..... 或者是 cd .......的话,它会自动扩展成 cd ../../../../.. 的形式。不过如果返回的上级目录太多的话 ........ 也是挺麻烦的

这个时候可以用空行 C-w ,一次向上一个目录,如果不是空行的话,则一下删一个单词,如果标记了区域的话,则删掉标记的内容

spc 比较简单,空行的话直接填入 switch-to-buffer ,不过在 eshell-cmpl 里面定义了 它的补全方式。如果你多输入空格再补全的话,它会填入 \* ,用于补全临时 buffer。同学们可以研究下它的补全的写法,自己写其它命令的补全,其实是很简单的。

显示上一条命令的名称及运行时间

代码: 全选

(add-hook 'eshell-load-hook
          (lambda()(setq last-command-start-time (time-to-seconds))))
(add-hook 'eshell-pre-command-hook
          (lambda()(setq last-command-start-time (time-to-seconds))))
(add-hook 'eshell-before-prompt-hook
          (lambda()
              (message "%s ==> spend %g seconds" 
                       (cond 
                        ((not eshell-last-command-name) "GO!")
                        ((string-match "^#<" eshell-last-command-name)
                         (substring eshell-last-command-name 2 -1))
                        (t eshell-last-command-name))
                       (- (time-to-seconds) last-command-start-time))))
上次由 kardinal 在 2011-10-22 10:59,总共编辑 4 次。
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: 我的 emacs 配置文件夹

#7

帖子 kardinal » 2011-10-21 14:20

那天在别地儿发帖子,因为截图的时候暴露出来我用的是 windows ,而被鄙视了,ok ,哥今天装了一个 ubuntu 11.10
这下好了,如果需要截图的话,再也不用做贼心虚了 :em05
我又想,字体是不是也要设置两套,windows 下一套 linux 下一套?上回就是用的雅黑被人家一眼看出来了
但是手动设置又挺麻烦,于是我把我的字体配置文件改动一下
[lisp]
(if window-system
(progn

(if (eq window-system 'w32)
;; myfont1 是 buffer-face-mode 及 mode-line 字体
(setq myfont "Yahei Mono" myfont1 "宋体")
(setq myfont "文泉驿等宽正黑" myfont1 "文泉驿点阵正黑"))

;; ** all
(set-fontset-font (frame-parameter nil 'font)
'unicode `(,myfont . "unicode-bmp"))

;; ** buffer face mode
(set-face-attribute 'variable-pitch nil
:font (concat myfont1 "-10") :fontset "fontset-standard")

。。。。。。。。。。。。。。。。。。
;; ** mode-line
(custom-set-faces
`(mode-line ((t (:foreground "#96dd3b" :background "#336442"
:height 0.8 :family ,myfont1)))))
[/lisp]
今天折腾了一天的 ubuntu ,现在弄的很不错,尤其是我的无线上网卡,直接就能识别,不像我前两天用 archlinux,死活装死…… 好了,我要到 windows 下面试试这样配置效果如何了
上次由 kardinal 在 2011-11-02 12:14,总共编辑 3 次。
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: 我的 emacs 配置文件夹

#8

帖子 kardinal » 2011-10-21 14:21

好吧,我试过了,在ubuntu 里面,找不到init.emacs 文件夹的情况下,是会报错的,所以
https://github.com/ran9er/init.emacs/bl ... e-start.el

而且ubuntu下把 site-start.el 拷贝到 /usr/share/emacs/site-lisp 下面不起作用……
所以,把site-start.el 改为 ~/.emacs :em20
上次由 kardinal 在 2011-10-25 8:46,总共编辑 1 次。
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: 我的 emacs 配置文件夹

#9

帖子 kardinal » 2011-10-21 14:21

今天无聊,把 color-theme 干掉了,改成直接设置 face ,启动足足快了0.5秒,爽得很……
color-theme 用点资源就罢了,关键是里面的主题还巨难看,既然我都自己设置,那还倒次手干嘛

在配置文件中加入

代码: 全选

(require 'my-color-theme)
(enable-theme 'forest)
这是我的自定主题
https://github.com/ran9er/init.emacs/bl ... r-theme.el
上次由 kardinal 在 2011-10-26 2:55,总共编辑 2 次。
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: 我的 emacs 配置文件夹

#10

帖子 kardinal » 2011-10-21 14:21

总觉得哪里不对劲
[lisp] (while key-defs
(let* ((key (pop key-defs))
(def (if (eq group nil)(pop key-defs) group)))
[/lisp]
列表里的每个值都要执行一次 if ,太没有效率(当然这是因为多了一种情况需要判定,否则的话还是可以的)。决定还是用原来的方式,不过把参数由一维列表转换成二维列表。
也没找到现成的函数,自己写一个吧
[lisp](defun 2list (lst)
(if lst
(cons
(list (car lst)(cadr lst))
(2list (cddr lst)))))
[/lisp]
把 (1 2 3 4 5 6) 转换成 ((1 2)(3 4)(5 6))
[lisp](defun define-key-s (keymap key-defs &optional group)
(let ((map (cond
((eq keymap 0) (current-global-map))
((eq keymap 1) (current-local-map))
(t keymap)))
(defs (if (null group)
(2list key-defs)
(mapcar (lambda (k) (list k group)) key-defs))))
(mapc
(lambda (d) (define-key map (eval `(kbd ,(car d))) (cadr d)))
defs)))
[/lisp]
感觉速度快了不少 :em09
不过听说递归不给力,尾递归要强大一些
[lisp](defun t2list (lst acc)
(if (caddr lst)
(t2list (cddr lst)
(cons (list (caddr lst)(cadddr lst)) acc ))
acc))
(defun tlist (lst)
(t2list lst (list (list (car lst)(cadr lst)))))
[/lisp]
样子土了些…… 标准的写法得用 labels,但是 elisp 里面没有这个东东,得 require 'cl-macs ,不费那劲了,反正效果差不多
[lisp](test-times 1000 (test-list 100 2list)) ;=> 1.35
(test-times 1000 (test-list 100 tlist)) ;=> 1.42
[/lisp]根据我测试的结果,似乎尾递归还要略慢一点……
不过尾递归在空间上的要求似乎要低一点,max-lisp-eval-depth 为 1000 的条件下
[lisp](test-list 660 2list)
(test-list 990 tlist)
[/lisp]尾递归版本能够计算的数组要多一半……总之是相当的诡异 :em20

测试用到的两个宏
[lisp](defmacro test-list (n &rest fn)
"用大小为 n 的字符串列表,测试函数 fn (fn 最后一个参数为列表)"
`(let* ((i ,n)(x nil))
(while (> i 0)
(setq x (cons (number-to-string i) x))
(setq i (- i 1)))
(,@fn x)
))

(defmacro test-times (n &rest body)
"计算 body 运行 n 次所需时间"
`(let ((tm ,n)(beg (time-to-seconds)))
(while (> tm 0)
(progn ,@body)
(setq tm (1- tm)))
(- (time-to-seconds) beg)
))

;; 例子
;(test-times 100 (test-list 9 define-key-s (current-local-map)))
[/lisp]
上次由 kardinal 在 2011-11-02 12:07,总共编辑 3 次。
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: 我的 emacs 配置文件夹

#11

帖子 kardinal » 2011-10-21 14:45

大神不敢当了……其实我来这里的时候很长了,算是资深菜鸟了吧

下午还有事情,回来继续
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 我的 emacs 配置文件夹

#12

帖子 lilydjwg » 2011-10-21 14:52

kardinal 写了:大神不敢当了……其实我来这里的时候很长了,算是资深菜鸟了吧

下午还有事情,回来继续
不开个脚本继续?
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: 我的 emacs 配置文件夹

#13

帖子 kardinal » 2011-10-21 14:58

这个比较有难度 :em06
头像
jobinson99
帖子: 1169
注册时间: 2007-04-28 15:14
系统: NixOS+虚拟机各种系统
联系:

Re: 我的 emacs 配置文件夹

#14

帖子 jobinson99 » 2011-10-21 15:15

我一般把配置文件、额外的插件放在~/.emacs.d/config ~/.emacs.d/plugin里面

一般不去改/usr等需要权限的文件。
黑色的不是眼睛,而是眼圈
关注和实现科技领域未来3年内有大规模普及潜力、能改善穷人生活品质的技术/应用。
NixOS + lxqt + 无人生产线 + 无人农场 (已发明全套山地农业机械 + 线性喷洒系统,成片农业采收系统)+ 随身设备,柔性电路,冷热双调衣……
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: 我的 emacs 配置文件夹

#15

帖子 kardinal » 2011-10-21 15:22

当然,你也可以把 site-start.el 改成 .emacs …… 如果你非得这么做
各种插件存档的地方一般都是 ~/.emacs.d/,这种混乱状态让人难以忍受……而且它是个隐藏文件夹
回复