现在我尝试将.dir-locals.el用于我自己的项目。 但是,每当我选择永久保存它时,它都会保存在init.el的末尾。 我想将其更改为另一个单独的文件 - 例如〜/ mydirlocals.el。
请让我知道可能是什么解决方案。
PS:我已经尝试将自定义文件更改为单独的文件。但遗憾的是,它使用其他自定义变量保存了我的dir-local变量。 我想避免这种情况,并将我的dir-locals变量保存在一个完全独立的文件中。
答案 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.el
或custom.el
结束时保存,安全值。就像在,默认情况下,Emacs不信任它们,除非它们匹配某种类型的谓词,表明它们没问题。这是一个很好的策略,因为文件和目录本地可以通过打开文件使Emacs运行任意代码。当您永久申请时,您告诉Emacs该值是安全的;它基本上只是创建一个与精确值匹配的谓词,并将其存储在自定义中。
如果您想阻止提示(以及保存),您需要使用自己的谓词将变量标记为安全。
例如,我设置了
(put 'adaptive-wrap-extra-indent 'safe-local-variable 'integerp)
这意味着adaptive-wrap-extra-indent
只要它是一个整数就可以了。我知道这是可以的,因为我将该变量添加到adaptive-wrap
包中(虽然我当时不知道安全的本地人;我提交了一个修复它的错误,似乎被忽略了)。显然,您可以使用任何谓词,包括(lambda (x) t)
,但我建议不要这样做。