如果你想拆分你的custom-set-variables,但又想
比initsplit.el 更轻的东西,然后试试这个:
(defmacro custom-set-variable (var value)
"Call `custom-set-variables' with a warning shown
when customizing using the customize GUI.
XXX: does not support setting the optional NOW and
REQUEST (dependency) fields."
(custom-set-variables
;; `load-file-name' is set by `load-file':
;; http://stackoverflow.com/a/1971376/470844
`(,var ,value nil nil
,(format "!!! CAREFUL: CUSTOM-SET IN %s !!!" load-file-name))))
现在,将您的配置模块放在单独的文件中,然后加载它们
正如其他人所建议的那样,在您的~/.emacs 中使用load-file。每个
配置模块,使用
(custom-set-variable var value)
而不是
(custom-set-variables '(var value))
或
(setq-default var value)
设置由自定义管理的变量时。然后,如果你需要
要使用自定义界面自定义变量,您会看到一个
警告告诉您自定义应存储在哪个文件中:
"!!! CAREFUL: CUSTOM-SET IN <path to module file> !!!"
如果您对配置文件进行版本控制,那么差异会告诉您哪个
~/.emacs 的行移入自定义模块。
天真地使用多个问题的讨论
custom-set-variables 来电:http://www.dotemacs.de/custbuffer.html
编辑:回答艾伦的问题
上面custom-set-variable宏解决的问题
Emacs 中的自定义界面将所有自定义设置变量保存在
每当您编辑任何自定义设置变量时,您的~/.emacs。如果你
模块化您的自定义设置变量,通过将它们分散到
多个文件,那么你需要意识到emacs何时插入重复
.emacs 中的设置,然后将其删除。 custom-set-variable
上面的宏可以帮助你做到这一点。
我的配置文件中的一个真实示例
我自定义设置与空格相关的变量
~/.emacs.d/extensions/whitespace.el 由我加载的文件
~/.emacs。例如,我设置我的search-whitespace-regexp
像这样的变量:
(nc:custom-set-variable search-whitespace-regexp "[ \t\r\n]+")
现在,发生了两件事。首先,当我在
自定义界面我收到警告:
其次,如果我使用自定义界面编辑任何变量,我的
~/.emacs 很明显我已经掩盖了一些定义。
例如,在更改search-whitespace-regexp 和
global-whitespace-mode在自定义界面,我得到:
$ svn di --diff-cmd "diff" -x "-U0" ~/v/conf
Index: /home/collins/v/conf/dot.emacs
===================================================================
--- /home/collins/v/conf/dot.emacs (revision 267)
+++ /home/collins/v/conf/dot.emacs (working copy)
@@ -55,0 +56 @@
+ '(agda2-include-dirs (\` ("." (\, (file-truename "~/local/opt/agda-std-lib/src")))) nil nil "!!! CAREFUL: CUSTOM-SET IN /home/collins/.emacs.d/extensions/agda.el !!!")
@@ -58,0 +60,3 @@
+ '(global-whitespace-mode t)
+ '(indent-tabs-mode nil nil nil "!!! CAREFUL: CUSTOM-SET IN /home/collins/.emacs.d/extensions/whitespace.el !!!")
+ '(indicate-empty-lines t nil nil "!!! CAREFUL: CUSTOM-SET IN /home/collins/.emacs.d/extensions/whitespace.el !!!")
@@ -72,0 +77 @@
+ '(search-whitespace-regexp "" nil nil "!!! CAREFUL: CUSTOM-SET IN /home/collins/.emacs.d/extensions/whitespace.el !!!")
@@ -74,0 +80 @@
+ '(tab-width 2 nil nil "!!! CAREFUL: CUSTOM-SET IN /home/collins/.emacs.d/extensions/whitespace.el !!!")
宏无法帮助我记住我改变了
search-whitespace-regexp,只是它已经设置在其他地方,
但它确实帮助我知道我应该从中删除哪些变量设置
我的~/.emacs(所有有警告的人),我应该离开哪些
在我的~/.emacs 中,或移动到其他单独的文件(所有那些没有
警告)。
结论
这个宏可能有点矫枉过正,但是一旦它存在,它就很容易使用,并且可以实现
使用阴影自定义设置更容易避免在脚上射击自己
变量。