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

fal*_*lse 16 git emacs symlink

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

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

我必须输入y e s 以获取该文件.有一种更简单的方法吗?

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

jpk*_*tta 11

设置vc-follow-symlinks.你可能想要它nil(开放链接),但一定要阅读文档因为t(开放目标)也是明智的.

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

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


Ark*_*zyk 5

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

首先,一个半解决方案:

(defalias 'yes-or-no-p 'y-or-n-p)
Run Code Online (Sandbox Code Playgroud)

现在,您无需键入完整的yes+,只需在中询问的所有情况下Enter键入单个y或字母即可。nyes-or-noEmacs

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

(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)
Run Code Online (Sandbox Code Playgroud)

在这里,我们创建一个新的钩子,每次调用时都会调用该find-file钩子,例如使用C-x C或in 。它首先检查访问的文件是否确实存在于文件系统上 ,因为在尚未创建的文件上运行它是没有意义的。接下来,它检查文件名是否已知 ,例如,当打开常规文件但 在缓冲区中时,它将返回。最后它检查文件名是否等于使用 提供的字符串之一。如果是,则在本地设置为。您可以 根据需要添加任意多行。在上面的示例中,我 在下一行中添加了另一个文件名的占位符。feDiredfile-exists-pstringptnilDiredstring-equalvc-follow-symlinkststring-equal/home/ja/.fluxbox/keys