Если вы хотите разделить ваш 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))))
Теперь поместите ваши конфигурационные модули в отдельные файлы и загрузите их
с load-file
в вашем ~/.emacs
, как предлагали другие. В каждом
модуль конфигурации, используйте
(custom-set-variable var value)
вместо
(custom-set-variables '(var value))
или
(setq-default var value)
при установке переменных, управляемых настройкой. Тогда, если вам когда-нибудь понадобится
чтобы настроить переменную с помощью интерфейса настройки, вы увидите
предупреждение о том, в каком файле должна храниться настройка:
"!!! CAREFUL: CUSTOM-SET IN <path to module file> !!!"
Если вы управляете файлами конфигурации, тогда diff скажет, какой
линия вашего ~/.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
, или перейти на другие отдельные файлы (все те, без
предупреждения).
Заключение
Макрос, вероятно, излишним, но как только он существует, его легко использовать, и он делает его
легче не выстрелить себе в ногу с затененным кастомом
переменные.