现在我正在尝试将 .dir-locals.el 用于我自己的项目。 然而,每当我选择永久保存它时,它就会保存在 init.el 的末尾。 我想将其更改为另一个单独的文件 - 例如 ~/mydirlocals.el。
请让我知道这个问题的解决方案是什么。
PS:我已经尝试将自定义文件更改为单独的文件。但不幸的是,它保存了我的目录局部变量和其他自定义变量。 我想避免这种情况并将我的 dir-locals 变量保存在一个完全独立的文件中。
您无法使用自定义界面来更新
.dir-locals.el
文件。定制是针对您自己的配置。如果您想编辑/更新目录局部变量文件,您需要直接编辑该文件,或使用 M-x add-dir-local-variable
。
后一个命令将提示您输入详细信息。请注意,提示中没有提供变量 value 的默认值,但您可以键入 M-n 或
另请注意,该命令不会询问变量位于哪个目录中——它将在当前缓冲区的默认目录中创建/更新一个
.dir-locals.el
文件。当然,从目标目录的 Dired 缓冲区发出命令是一种安全的方法,但您可能希望从您希望添加变量的模式的缓冲区中执行此操作 - 这是该模式的默认建议,并且相关变量的当前值对您来说会更有用。
(如果目录中没有适当类型的文件,您始终可以 C-xC-f 适当文件名的新/未保存的缓冲区,根据需要多次使用
add-dir-local-variable
,然后当您需要时完成后,只需杀死您创建的任何新缓冲区而不保存它们。)
话虽如此,我仍然不能100%确定您的要求是什么,因为您的问题有点混乱;但您可能还想知道您可以在没有
.dir-locals.el
文件的情况下使用目录局部变量,因为您也可以在初始化文件中完全配置它们。
有关详细信息和示例,请参阅 https://www.emacswiki.org/emacs/DirectoryVariables。
免责声明:我没有使用过 dir-local vars,但我使用过 file-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)
,尽管我建议不要这样做。