Emacs和符号链接

Ame*_*ina 45 emacs

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

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

Symbolic link to Git-controlled source file; follow link? (y or n)
Run Code Online (Sandbox Code Playgroud)

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

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

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

我怎样才能做到这一点?

Dan*_*ton 48

当它提示时

Symbolic link to Git-controlled source file; follow link? (y or n)
Run Code Online (Sandbox Code Playgroud)

类型n.而不是遵循符号链接并直接打开符号链接指向的文件,emacs将根据您的需要使用符号链接本身.

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

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

  • 这意味着Emacs VC支持将不可用:特定信息,如状态和版本以及可用的操作/快捷方式. (2认同)

Shr*_*saR 39

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

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会要求确认它是否应该跟随链接.如果为nil,则访问该链接并显示警告.

您可以自定义此变量.

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

(setq vc-follow-symlinks t)
Run Code Online (Sandbox Code Playgroud)

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

(setq vc-follow-symlinks nil)
Run Code Online (Sandbox Code Playgroud)

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


Rad*_*ugh 6

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

(setq vc-handled-backends nil)
Run Code Online (Sandbox Code Playgroud)

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

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


Arn*_*rne 5

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

(global-set-key (kbd "<f7>") (lambda () (interactive)
  (find-file (file-truename user-init-file))))
Run Code Online (Sandbox Code Playgroud)

  • 这些都是完全合理的理由。但是,我认为您不应该避免动态作用域。像这样的用例正是动态作用域有用的原因。顺便说一句,请注意,即使您启用词法作用域,声明的变量仍将具有动态作用域,从而使您能够充分利用动态作用域,而不会产生任何缺点。 (2认同)