Emacs和符号链接

时间:2013-03-13 15:54:47

标签: emacs

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

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

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

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

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

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

我该怎么做?

4 个答案:

答案 0 :(得分:46)

当提示

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

输入n。而不是遵循符号链接并直接打开符号链接指向的文件,emacs将根据您的需要使用符号链接。

警告:执行此操作可防止emacs的版本控制功能检测到目的地的存储库并与之交互(如果有)。

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

答案 1 :(得分:37)

为了完整起见,对于有疑问的人

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

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

  

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

     

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

     

如果此变量为t,则VC跟随链接并访问实际文件,   在回声区域告诉你它。如果是'ask',VC要求   确认是否应该按照链接。如果为零,则链接为   访问并显示警告。

     

您可以自定义此变量。

结果是,为避免每次都被提示,您可以在.emacs设置

(setq vc-follow-symlinks t)

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

(setq vc-follow-symlinks nil)

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

答案 2 :(得分:5)

如果你有一个像我一样的用例,我只想用热键访问某些文件而不问,你可以使用file-truename函数来解析文件中的所有符号链接,从而防止烦人问题而不改变其他一切的默认值。

(global-set-key (kbd "<f7>") (lambda () (interactive)
  (find-file (file-truename user-init-file))))

答案 3 :(得分:3)

如果您不了解或不关心Emacs的vc包,请执行

(setq vc-handled-backends nil)

完全禁用vc以及关于跟随符号链接的恼人消息。

然后,您可能希望自定义find-file-visit-truename,具体取决于您是否要查找文件以遵循符号链接。