跟随 link 进入 git-repo 而无需冗长的对话

Following a link into a git-repo without lengthy dialog

在一个目录中,我将符号 links 放入 git 管理的目录中(全部在 Linux 下)。每次我想 e-dit 这样的 link 我都会收到一个对话问题:

Symbolic link to Git-controlled source file; follow link? (yes or no)

我必须输入 y e s 获取文件。有没有更简单的方法?

理想情况下,声明目录不需要对话框。

设置vc-follow-symlinks。您可能希望它是 nil(打开 link),但请务必阅读文档,因为 t(打开目标)也是明智的。

(setq vc-follow-symlinks nil)

如果你不想全局设置它,你可以将它设为 dir 局部变量。

一个有趣的问题。我将所有的点文件存储在存储库中,并且 有一堆符号链接散布在整个文件系统中,所以这是 我的一个已知问题。

一、半解:

(defalias 'yes-or-no-p 'y-or-n-p)

现在您无需输入完整的 yes + Enter 在所有情况下键入单个 yn 字母 在 Emacs.

中询问 yes-or-no

现在,一个真正的解决方案:

(defun vc-mode-hook ()
  (message buffer-file-name)
  (when
      (and
       (file-exists-p (buffer-file-name))
       (stringp buffer-file-name)
       (or (string-equal "/home/ja/.fluxbox/keys" buffer-file-name)
       (string-equal "<PATH_TO_ANOTHER_FILE>" buffer-file-name))
       (setq-local vc-follow-symlinks t)
       )))

(add-hook 'find-file-hook 'vc-mode-hook)

这里我们创建一个新的钩子,每次find-file被调用 调用,例如 C-x C-feDired 中。它首先检查 如果访问的文件确实存在于文件系统上使用 file-exists-p 因为在文件上 运行 它没有意义 尚未创建。接下来它检查文件名是否已知使用 stringp - 打开常规文件时会 return tnil 例如在 Dired 缓冲区中。最后它检查文件是否 名称等于使用 string-equal 提供的字符串之一。如果它 即,它在本地将 vc-follow-symlinks 设置为 t。你可以添加尽可能多的 string-equal 行随心所欲。在上面的例子中我添加了 /home/ja/.fluxbox/keys 和另一个文件名的占位符 在下一行。