Как сохранить.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 для получения подробной информации и примеров этого.

Другие вопросы по тегам