我想解决我的“.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/
,你放弃脚本,它们将被系统自动神奇地拾取。请确认。
如果没有,有人可以给我一个脚本,或者给我一个解决方案吗?
由于
答案 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
添加代码应该是最后的手段!