在一个目录中,我有一个git管理目录的符号链接(全部在Linux下)。每次我想要 e -dit这样的链接我都会得到一个对话框问题:
Symbolic link to Git-controlled source file; follow link? (yes or no)
我必须输入 y e s ⏎才能找到该文件。有一种更简单的方法吗?
理想情况下,声明目录不需要对话。
答案 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
和另一个文件名的占位符
在下一行。