Как сохранить.dir-локальные переменные в отдельном каталоге
Сейчас я пытаюсь использовать.dir-locals.el для своих собственных проектов. Однако он сохраняется в конце init.el всякий раз, когда я решаю сохранить его навсегда. Я хотел бы изменить его на другой отдельный файл - например, ~/mydirlocals.el.
Пожалуйста, дайте мне знать, что может быть решением для этого.
PS: я уже пытался изменить пользовательский файл на отдельный. Но, к сожалению, он сохранил мои локальные переменные dir с другими пользовательскими переменными. Я хочу избежать этого и сохранить мои переменные dir-locals в совершенно отдельный файл.
2 ответа
Отказ от ответственности: я не использовал dir-local vars, но я использовал file-local vars. Я предполагаю, что ди-местные жители работают так же.
Локальные переменные не сохраняются в конце init.el
или же custom.el
, безопасные значения. Как и в случае, Emacs не доверяет им по умолчанию, если они не соответствуют некоторому предикату, указывающему, что они в порядке. Это хорошая политика, потому что локальные файлы и каталоги могут заставить Emacs запускать произвольный код, просто открыв файл. Когда вы подаете заявку постоянно, вы говорите Emacs, что это значение безопасно; в основном он просто создает предикат, который соответствует точному значению, и сохраняет его с помощью customize.
Если вы хотите предотвратить приглашение (и, следовательно, сохранение), вам нужно пометить переменные как безопасные с помощью собственного предиката.
Например, я установил
(put 'adaptive-wrap-extra-indent 'safe-local-variable 'integerp)
Который означает, что adaptive-wrap-extra-indent
все в порядке, пока это целое число. Я знаю, что это нормально, потому что я добавил эту переменную в adaptive-wrap
пакет (хотя в то время я не знал о безопасных локальных системах; я представил ошибку, чтобы исправить ее, которая, кажется, игнорируется). Очевидно, что вы можете использовать любой предикат, в том числе (lambda (x) t)
Хотя я бы рекомендовал против этого.
Вы не можете использовать интерфейс настройки для обновления .dir-locals.el
файлы. Настройка для вашего собственного конфига. Если вы хотите редактировать / обновлять файл локальных переменных каталога, вам нужно либо отредактировать этот файл напрямую, либо использовать Mx add-dir-local-variable
,
Последняя команда запросит у вас детали. Обратите внимание, что в приглашении не указывается значение по умолчанию для значения переменной, но вы можете ввести Mn или
Также обратите внимание, что команда не спрашивает, к какому каталогу относятся локальные переменные - она создаст / обновит .dir-locals.el
файл в каталоге по умолчанию для текущего буфера. Выдача команды из зарезервированного буфера для намеченного каталога, естественно, является безопасным подходом, но вы можете сделать это из буфера в режиме, для которого вы хотите добавить переменные - таким образом, предложение по умолчанию для режима, и текущие значения переменных, о которых идет речь, будут более полезными для вас.
(Если в каталоге нет файла соответствующего типа, вы всегда можете CxCf новый / несохраненный буфер с соответствующим именем файла, используйте add-dir-local-variable
столько раз, сколько необходимо, а затем, когда вы закончите, просто уничтожьте все новые буферы, которые вы создали, не сохраняя их.)
Тем не менее, я все еще не уверен на 100%, каково ваше требование, так как ваш вопрос немного запутан; но вы также можете знать, что вы можете использовать локальные переменные каталога без .dir-locals.el
файл вообще, так как вы можете альтернативно настроить их полностью в вашем файле инициализации.
См. https://www.emacswiki.org/emacs/DirectoryVariables для получения подробной информации и примеров этого.