让.emacs.d就像一个.d文件夹

时间:2013-12-29 15:11:07

标签: emacs configuration configuration-files

我想解决我的“.emacs bankruptcy”问题,而且我已经完成了

https://help.ubuntu.com/community/EmacsHowto
http://www.emacswiki.org/emacs/DotEmacsBankruptcy
http://www.emacswiki.org/emacs/DotEmacsDotD
http://www.gnu.org/software/emacs/manual/html_node/emacs/Init-File.html

我仍然不清楚.emacs.d文件夹是否是解决方案。也就是说,它是否会像普通的.d文件夹一样运行,例如,/etc/profile.d/,你放弃脚本,它们将被系统自动神奇地拾取。请确认。

如果没有,有人可以给我一个脚本,或者给我一个解决方案吗?

由于

3 个答案:

答案 0 :(得分:3)

我的~/.emacs文件的基本内容是:

(require 'cl)

(loop for src in (directory-files "~/.emacs.d" 'full-path "[0-9].*\\.el$") do
      (let ((byte (concat src "c")))
    (when (file-newer-than-file-p src byte)
      (byte-compile-file src))
    (message "Loading %s.elc" byte)
    (load-file byte)))

它从~/.emacs.d加载以数字开头的配置文件。如果源文件(扩展名.el)比字节编译版本(扩展名.elc)更新,那么它将对字节进行字节编译。然后它加载字节编译文件。

答案 1 :(得分:1)

这是我的~/.emacs

;; base dirs
(defvar dropbox.d "~/Dropbox/")
(defvar emacs.d (concat dropbox.d "source/site-lisp/"))
;; load path
(add-to-list 'load-path emacs.d)
(defun add-subdirs-to-load-path (dir)
    (let ((default-directory dir))
      (normal-top-level-add-subdirs-to-load-path)))
(add-subdirs-to-load-path emacs.d)
(load "init")

所有其他脚本都由~/Dropbox/source/site-lisp/init.el加载 它们本身位于~/Dropbox/source/site-lisp。 这就是我在多台机器上拥有相同配置的方式。 以下是.../site-lisp/hooks.el加载init.el的方式:

(load "hooks")

我的init.el大约有100行,.emacs大约有20行。 剩下的8000行脚本被分成大约20个文件。

答案 2 :(得分:1)

~/.emacs.d/ 的工作方式与/etc/profile.d//etc/modules-load.d/或类似目录一样,即Emacs 会自动加载任何Emacs Lisp该目录中的文件。

事实上,Emacs明确建议反对~/.emacs.d/中放置Emacs Lisp库。如果您将~/.emacs.d/添加到load-path,则字节编译器会发出警告。

相反,创建一个新的子目录,例如~/.emacs.d/lisp。将此目录明确添加到load-path init.el中包含以下代码:

(add-to-list 'load-path (locate-user-emacs-file "lisp"))

然后,将您的Emacs Lisp文件放在此目录中,例如~/.emacs.d/lisp/foo.el,然后将其加载到init.el

(load "foo" nil 'no-message)

避免可怕的.emacs破产的最佳方法是实际避免大型自定义!最值得注意的是,尽量避免使用任何自定义函数和命令。

相反,尝试找到最接近您想要的ELPA包,并尝试习惯它,或根据您的需要进行自定义。如果你没有找到,首先尝试自己编写并在Github,Marmalade或MELPA上发布。

不要害怕在公共场合维护包裹。无论如何,无论是否在init.el,您都必须维护自定义,因此您也可以让其他Emacs用户帮助您完成这项工作。

init.el添加代码应该是最后的手段