我可以将特定文件设置为自动且无提示地接受更改吗?


9

也就是说,我可以为某个特定文件指定我不希望Emacs通知我该文件在磁盘上已更改,并提示我是否要接受更改吗?我不想在全局范围内执行此操作,只是针对我知道会经常在Emacs之外更改的文件(尤其是与日历相关的Org文件)进行更改。

Answers:


8

您可以使用M-x auto-revert-modemanual)对特定的缓冲区执行此操作。对于文件缓冲区,这将每秒钟检查一次auto-revert-interval(默认为5)是否有更改,并自动从磁盘更新缓冲区。

您的标题为“特定文件”,而您的问题正文中提到的是文件类型(组织文件)。根据您的情况,可以通过以下几种方法设置此模式以持久地获得所需的效果。如果将早期方法应用于您的特定用例,则可以说是更清洁,更高效。

如果您知道每个特定类型的文件都需要这样做,请考虑将模式挂钩添加到您的初始化安装程序中。

(add-hook 'org-mode-hook (lambda () (auto-revert-mode 1)))

如果您知道某个目录中的所有内容都需要使用它,请考虑在相关位置的.dir-locals.el中进行设置,并确保适当时使用VCS忽略本地设置文件。此示例将应用于同一目录(和子目录)下文件的所有组织模式缓冲区。您还可以运行M-x add-dir-local-variableEmacs来自动生成并保存该文件。

(
  (org-mode . ((auto-revert-mode . 1)))
 )

如果以上两种方法都不适合您,请考虑在每个文件中设置一个文件局部变量。设置其中一个的最短,最通用的方法是在目标文件的第一行中包含以下内容:

-*- eval: (auto-revert-mode 1); -*-

在源文件中,文本可以跟随注释定界符(//,#等)。您可以运行M-x add-file-local-variable-propline以使Emacs自动为您生成此文件,也可以使它生成M-x add-file-local-variable使用文件底部而不是顶部的格式。

仅当您不与任何人共享文件时,才使用此方法。从GNU手册

以这种方式指定次要模式通常是一个错误。次要模式代表各个用户的首选项,将您的首选项强加于可能编辑文件的另一个用户可能是不合适的。如果您希望根据情况自动启用或禁用次要模式,通常最好在主要模式挂钩中进行操作。


2
不是(auto-revert-mode 1)打开次要模式的标准方法setq吗?
mbork 2014年

1
你是对的。一秒钟清理完该示例。谢谢。

1
别客气。(也就是说,AFAIU,文件局部变量最适合OP的用例。)
mbork

1
你可能是对的。IMO取决于其文件组织的详细信息。如果他们知道将在emacs之外频繁更改的文件都是组织文件,或者所有文件都位于同一位置(例如,Dropbox目录),则基于模式或基于目录的方法可能会更简洁,更容易,并且避免整理文件作为奖励。

2
要同时使用这两种方法,请使用add-file-local-variableadd-dir-local-variable
肖恩·艾瑞德

3

是。将其放在文件末尾。

* COMMENT Config
Local Variables:
eval: (auto-revert-mode 1)
End:

这假定为组织模式,对于其他模式,请使用以下链接中所说明的语言注释。

注意:有关背景,安全信息和警告,请参阅手册中“文件中的局部变量”,这可能并不总是一个好主意。另外,有关恢复部分说明了如何更改默认值(5秒间隔)以进行自动恢复。


这绝对需要在最后吗?我有一个生成.org文件的脚本,我把它放在开头附近了-似乎不起作用....
emacsomancer 2014年

1
是的,请参阅链接。并查看其他答案以获得一线解决方案。
mbork
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.