从命令行打开文件时使 vim 遵循符号链接

Make vim follow symlinks when opening files from command line

我是一个巨大的 vim 爱好者,但我找不到让 vim 在打开文件时跟随 symlinks 的方法。

例如,我家目录中的所有点文件都被符号link编辑到 .zprezto 目录中:

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

我将我的 .zprezto 分支保存在私人 git 存储库中,然后用于使我所有的 Mac/Linux 机器和服务器保持同步。每当我编辑 vim 中的任何这些文件时,我用于 git 管理的插件 none 都能正常工作,因为我正在访问的 symlink当调用 vim ~/.zshrc 时在 git 存储库之外。当我从命令行打开它时,是否有任何方法可以强制 vim 跟随 link 并打开实际文件,以便缓冲区位于 git 存储库中?

试过这个:

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

但它没有像我希望的那样工作,因为它将我限制在一个没有选项的文件中。在我着手编写一个可以考虑所有边缘情况的大型包装函数之前,我想知道是否有更明智的方法来做到这一点。

所以看起来 vim 中没有任何内置功能允许这样做。我试了一下 wrapper 函数,结果发现它比我想象的要容易一些。这是最终结果:

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 的配置文件)即可使用它。

有一个名为 vim-symlink 的 Vim plugin,它允许您在打开文件时自动跟随符号链接。