假设我在/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/
的文件。
我该怎么做?
答案 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-symlinks
是vc-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
,具体取决于您是否要查找文件以遵循符号链接。