让vim在从命令行打开文件时跟随符号链接

9

我是一个狂热的vim爱好者,但我找不到一种方法来让vim在打开文件时跟随符号链接。

举个例子,我家目录中所有的点文件都是符号链接到.zprezto目录中的:

.vimrc -> ~/.zprezto/runcoms/vimrc
.zshrc -> ~/.zprezto/runcoms/zshrc

我将我的.zprezto fork放在一个私人git仓库中,然后用它来同步我所有的Mac / Linux机器和服务器。每当我用vim编辑这些文件时,因为我调用vim ~/.zshrc时使用的符号链接在git repo之外,所以我使用的所有git管理插件都无法正常工作。有没有办法强制vim跟随链接并打开实际文件,以便缓冲区位于git repo中?

尝试过这个:

function vim() {
  local ISLINK=`readlink $1`
  /usr/local/bin/vim ${ISLINK:-$1}
}

但是我希望它的效果更好,因为它限制了我只能处理一个文件而且没有选项可供选择。在编写一个可以考虑所有边缘情况的大型包装函数之前,我想知道是否有更明智的方法来完成这个任务。


2
你试图解决什么问题?这里的Vim似乎可以很好地跟随符号链接。 - lcd047
也许有点傻,但为什么不运行 vim ~/.zprezto/runcoms/zshrc 呢?另外,这个问答可能与您的问题有关(假设我正确地理解了您的问题):https://dev59.com/CUfRa4cB1Zd3GeqP6Ba1 - Dan Cornilescu
@DanCornilescu 在我发问之前就看到过那个链接——当处于符号链接目录中时,它可以很好地工作,但在编辑符号链接文件时却不行。调用 vim ~/.zprezto/runcoms/zshrc 可以很好地运行,但是这些文件并不在所有机器上的该目录中,而符号链接位于所有机器上的 ~/.zshrc 上。这意味着我可以在使用此 git 存储库的任何计算机上运行 vim ~/.zshrc,仍然可以获取我想要的文件,而无需首先确定存储库在该计算机上的位置。 - James Dinsdale
1
@lcd047 它可以正常跟随符号链接并打开文件,但是在vim中缓冲区的位置是符号链接的位置而不是物理文件的位置,这意味着就缓冲区而言它不在git仓库中,而是在主目录中。 - James Dinsdale
也许尝试将配置 Git 存储库在所有机器上放置在同一位置?除非你真的,真的想编写那个庞大的包装器 :) - Dan Cornilescu
显示剩余2条评论
2个回答

8

看起来vim没有内置此功能。我尝试了一下包装函数,结果比我想象的要简单一些。以下是最终结果:

function vim() {
  args=()
  for i in $@; do
    if [[ -h $i ]]; then
      args+=`readlink $i`
    else
      args+=$i
    fi
  done

  /usr/local/bin/vim -p "${args[@]}"
}

只需添加到您的.zshrc(或您喜欢的shell的配置文件)中即可使用。


不错。 [[ -h $i ]] 中的 -h 到底是什么意思?还有,我可以搜索什么来找到更多类似的内容? - nowthatsamatt

2

有一个名为vim-symlink的Vim插件,可以在打开文件时自动跟随符号链接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接