54

假设我有一个符号链接/home/.bashrc指向其他地方的实际 .bashrc 文件:/some/other/path/.bashrc它位于 git 存储库下。

如果我/home/.bashrc在 Emacs 中打开,它会提示我:

Symbolic link to Git-controlled source file; follow link? (y or n)

我通常输入y,因为我想编辑实际文件。但是,稍后,如果我执行buffer-file-nameEmacs,则返回/some/other/path/.bashrc,而不是/home/.bashrc)。

我希望 Emacs记住我访问此文件的方式是通过符号链接。

换句话说,我希望我的符号链接对 Emacs 是透明的。部分原因是因为我有几个依赖于当前文件路径的 Emacs 宏,而这些宏认为我正在使用位于/some/other/path而不是/home/.

我怎样才能做到这一点?

4

4 回答 4

54

当它提示

Symbolic link to Git-controlled source file; follow link? (y or n)

类型n。emacs 不会按照符号链接直接打开符号链接指向的文件,而是根据需要使用符号链接本身。

警告:这样做会阻止 emacs 的版本控制功能检测到目标的存储库并与之交互(如果有的话)。

如果您想更改默认行为,请查看vc-follow-symlinks自定义变量的文档。( C-h v vc-follow-symlinks)

于 2013-03-13T16:44:21.170 回答
54

只是为了完整性,对于有疑问的人

Symbolic link to Git-controlled source file; follow link? (y or n)

但不一定想要 OP 想要的,这是来自的文档C-h v vc-follow-symlinks(从我的 Emacs 版本开始 - 查找您自己的 Emacs 以获取详细信息):

vc-follow-symlinks是 中定义的变量vc-hooks.el。它的价值是问

文档:如果访问到受版本控制的文件的符号链接该怎么办。通过链接编辑这样的文件会绕过版本控制系统,这很危险并且可能不是您想要的。

如果这个变量是 t,VC 会跟随链接访问真实文件,并在回显区告诉你。如果是 `ask',VC 会要求确认是否应该点击链接。如果为零,则访问链接并显示警告。

您可以自定义此变量。

结果是为了避免每次都被提示,你可以在你的.emacs集合中

(setq vc-follow-symlinks t)

始终遵循符号链接(并直接编辑“实际”文件),或

(setq vc-follow-symlinks nil)

始终像在符号链接本身一样编辑文件(这似乎工作正常——它不会删除符号链接或任何东西——但它不会让你在文件上使用与版本控制相关的东西)。我更喜欢前者(与OP不同)。

于 2015-06-17T18:52:25.300 回答
8

如果你不知道或不关心 Emacs 的vc包,那就去做吧

(setq vc-handled-backends nil)

这完全禁用vc以及有关以下符号链接的烦人消息。

然后,您可能需要find-file-visit-truename根据是否要查找文件以遵循符号链接进行自定义。

于 2017-08-03T01:11:36.147 回答
5

如果您有像我这样的用例,我只想使用热键访问某些文件而不询问,您可以使用file-truename解析文件中所有符号链接的功能,因此可以防止烦人的问题,而无需更改其他所有内容的默认值.

(global-set-key (kbd "<f7>") (lambda () (interactive)
  (find-file (file-truename user-init-file))))
于 2016-09-10T13:55:09.457 回答