在没有冗长对话框的情况下链接到git-repo

时间:2017-04-27 16:19:36

标签: git emacs symlink

在一个目录中,我有一个git管理目录的符号链接(全部在Linux下)。每次我想要 e -dit这样的链接我都会得到一个对话框问题:

  

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

我必须输入 y e s 才能找到该文件。有一种更简单的方法吗?

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

2 个答案:

答案 0 :(得分:10)

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

(setq vc-follow-symlinks nil)

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

答案 1 :(得分:2)

一个有趣的问题。我将所有的dotfiles存储在存储库中 有一堆符号链接分散在整个文件系统中,所以这是 对我来说是个已知问题。

首先,半解决方案:

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

现在,您可以只输入完整的yes + Enter 在所有情况下输入单个 y n 字母 在yes-or-no中询问Emacs的位置。

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

(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 Dired C - f e 。它首先检查 如果访问文件确实存在于文件系统上使用 file-exists-p因为在文件上运行它没有意义 尚未创建。接下来,它检查是否已知使用文件名 stringp - 当常规文件打开但t时,它会返回nil 例如,在Dired缓冲区中。最后它检查文件是否存在 name等于使用string-equal提供的字符串之一。如果它 是,它在本地将vc-follow-symlinks设置为t。您可以添加任意数量 string-equal行如你所愿。在上面的例子中我添加了 /home/ja/.fluxbox/keys和另一个文件名的占位符 在下一行。