如何在单独的目录中保存.dir-local变量

时间:2016-12-15 03:28:45

标签: variables emacs local

现在我尝试将.dir-locals.el用于我自己的项目。 但是,每当我选择永久保存它时,它都会保存在init.el的末尾。 我想将其更改为另一个单独的文件 - 例如〜/ mydirlocals.el。

请让我知道可能是什么解决方案。

PS:我已经尝试将自定义文件更改为单独的文件。但遗憾的是,它使用其他自定义变量保存了我的dir-local变量。 我想避免这种情况,并将我的dir-locals变量保存在一个完全独立的文件中。

2 个答案:

答案 0 :(得分:2)

您无法使用自定义界面更新.dir-locals.el个文件。自定义适用于您自己的配置。如果要编辑/更新目录本地变量文件,则需要直接编辑该文件,或使用 M-x add-dir-local-variable

后一个命令会提示您输入详细信息。请注意,在变量的的提示符处没有提供默认值,但您可以键入 Mn < down> 到获取当前缓冲区中变量的值。

另请注意,命令询问变量本地的目录 - 它将在当前缓冲区的默认目录中创建/更新.dir-locals.el文件。从dired缓冲区为目标目录发出命令当然是一种安全的方法,但您可能希望从您希望添加变量的模式的缓冲区中这样做 - 这是模式的默认建议,以及有问题的变量的当前值对您将更有用。

(如果目录中没有相应类型的文件,您始终可以 Cx Cf 一个具有适当文件名的新/未保存缓冲区,使用{{1根据需要多次,然后当你完成时,只需杀死你创建的任何新缓冲区而不保存它们。)

所有人都说,我仍然不能100%确定你的要求是什么,因为你的问题有点困惑;但您可能还想知道可以使用目录本地变量而根本没有add-dir-local-variable文件,因为您可以在init文件中完全配置它们。

有关详细信息和示例,请参阅https://www.emacswiki.org/emacs/DirectoryVariables

答案 1 :(得分:2)

免责声明:我没有使用dir-local vars,但我使用了文件本地变量。我猜dir-locals的工作原理是一样的。

本地变量未在init.elcustom.el结束时保存,安全值。就像在,默认情况下,Emacs不信任它们,除非它们匹配某种类型的谓词,表明它们没问题。这是一个很好的策略,因为文件和目录本地可以通过打开文件使Emacs运行任意代码。当您永久申请时,您告诉Emacs该值是安全的;它基本上只是创建一个与精确值匹配的谓词,并将其存储在自定义中。

如果您想阻止提示(以及保存),您需要使用自己的谓词将变量标记为安全。

例如,我设置了

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

这意味着adaptive-wrap-extra-indent只要它是一个整数就可以了。我知道这是可以的,因为我将该变量添加到adaptive-wrap包中(虽然我当时不知道安全的本地人;我提交了一个修复它的错误,似乎被忽略了)。显然,您可以使用任何谓词,包括(lambda (x) t),但我建议不要这样做。