2016-12-15 19 views
0

Теперь я пытаюсь использовать .dir-locals.el для своих собственных проектов. Однако он сохраняется в конце init.el, когда я хочу сохранить его навсегда. Я хотел бы изменить его на другой отдельный файл - например, ~/mydirlocals.el.Как сохранить .dir-локальные переменные в отдельном каталоге

Пожалуйста, дайте мне знать, что может быть решением для этого.

PS: Я уже пытался изменить собственный файл на отдельный. Но, к сожалению, он сохранил мои локальные переменные с другими настраиваемыми переменными. Я хочу избежать этого и сохранить переменные dir-locals в полностью отдельном файле.

ответ

2

Вы не можете использовать интерфейс настройки для обновления файлов .dir-locals.el. Настроить для вашей собственной конфигурации. Если вы хотите отредактировать/обновить файл локальных переменных каталога, вам необходимо либо отредактировать этот файл напрямую, либо использовать M-xadd-dir-local-variable.

Последняя команда предложит вам подробную информацию. Обратите внимание, что значение по умолчанию не предлагается в командной строке для значения переменной, но вы можете ввести М-н или < вниз> для получения значения переменной в текущем буфере.

Следует также отметить, что команда делает не спросить, какой каталог переменные являются локальными - это создать/обновить .dir-locals.el файл в каталоге по умолчанию для текущего буфера. Разумеется, выдача команды из буфера для нужного каталога является безопасным подходом, но вы можете сделать это из буфера в режиме, для которого вы хотите добавить переменные, - таким образом, предложение по умолчанию для режима и текущие значения переменных, о которых идет речь, будут более полезными для вас.

(если нет файла соответствующего типа в каталоге, вы всегда можете CxCf новый/несохраненные буфер соответствующего файла, используйте add-dir-local-variable столько раз, сколько необходимо, и тогда, когда вы» вы сделали только убить любые новые буферы, которые вы создали, не сохраняя их.)

Что все сказано, я все еще не уверен на 100%, что ваше требование, так как ваш вопрос немного запутан; но вам также может понравиться, что вы можете использовать локальные переменные каталога без файла .dir-locals.el, так как вы можете в качестве альтернативы полностью их настроить в своем файле инициализации.

См. https://www.emacswiki.org/emacs/DirectoryVariables для получения более подробной информации и примеров этого.

+0

Извините, если я вас смутил. Говоря снова, мой вопрос заключается в том, как сохранить постоянную переменную dir-local в отдельном файле. Всякий раз, когда вы посещаете файл, Emacs спрашивает, хочу ли я подать заявку или нет, и применять его на постоянной основе. Если вы выбираете последний (постоянно применяете), нажимая!, То эти переменные добавляются в конце файла инициализации. На этом этапе я хотел бы сохранить их в другом своем конкретном файле, а не в файле init. Есть ли способ сделать это? – windrg00

+0

А, я думаю, я понимаю, о чем вы сейчас спрашиваете. Emacs просто сохраняет тот факт, что вы одобрили определенные значения как * приемлемые * как для некоторых локальных переменных. Эти данные не определяют значения для набора; Emacs просто проверяет эти данные, чтобы выяснить, нужно ли запрашивать ваше разрешение при настройке локальных переменных, которые могут быть небезопасны для установки без вашего разрешения. – phils

+0

Вы не можете сказать Emacs автоматически хранить эти данные в любом месте, кроме вашего 'custom-file', но если вы действительно хотите, вам нечего мешать вручную переместить эти данные в отдельный файл elisp -' (setq safe-local-variable-values ​​...) '- который вы« загрузите »в свой файл инициализации, а затем с помощью интерфейса настройки удалите данные из' custom-file'. Вы должны были бы повторить это обслуживание каждый раз, когда вы добавили новую безопасную ценность, однако, поэтому ИМО это было бы очень неприятно делать. – phils

2

Отказ от ответственности: Я не использовал dir-local vars, но я использовал файловые локальные вары. Я предполагаю, что dir-locals работают одинаково.

Локальные переменные не получают сохраняются в конце init.el или custom.el, то безопасные значения являются. Как и в случае, Emacs не доверяет им по умолчанию, если они не соответствуют некоторому предикату, указывающему, что они в порядке. Это хорошая политика, потому что локальные файлы и dir могут заставить Emacs запускать произвольный код, просто открыв файл. Когда вы постоянно применяете, вы сообщаете Emacs, что это значение безопасно; он в основном просто создает предикат, который соответствует точному значению и сохраняет его с настройкой.

Если вы хотите предотвратить подсказку (и, следовательно, экономить), вам необходимо пометить переменные как безопасные с помощью собственного предиката.

Например, я установил

(put 'adaptive-wrap-extra-indent 'safe-local-variable 'integerp) 

, что означает, что adaptive-wrap-extra-indent в порядке до тех пор, как это целое число. Я знаю, что это нормально, потому что я добавил эту переменную в пакет adaptive-wrap (хотя в то время я не знал о безопасных локальных сетях, я отправил ошибку, чтобы исправить ошибку, которая, как представляется, игнорируется). Очевидно, вы можете использовать любой предикат, включая (lambda (x) t), хотя я бы рекомендовал против этого.