【问题标题】:Make vim follow symlinks when opening files from command line从命令行打开文件时使 vim 遵循符号链接
【发布时间】:2021-04-02 21:59:57
【问题描述】:

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

例如,我的主目录中的所有点文件都符号链接到 .zprezto 目录中:

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

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

试过这个:

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

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

【问题讨论】:

  • 您要解决什么问题? Vim 似乎在这里很好地遵循符号链接。
  • 也许很笨,但为什么不运行vim ~/.zprezto/runcoms/zshrc 呢?另外,这个问答可能是相关的(假设我正确理解了你的问题):stackoverflow.com/questions/708700/…
  • @DanCornilescu 在我发布问题之前看到了该链接 - 在符号链接目录中运行良好,但不适用于编辑符号链接文件。调用vim ~/.zprezto/runcoms/zshrc 效果很好,但文件不在每台机器上的那个目录中,而符号链接在所有机器上都位于~/.zshrc。这意味着我可以使用这个 git repo 在任何机器上运行vim ~/.zshrc,并且仍然可以获得我想要的文件,而不必先在机器上计算出 repo 的位置。
  • @lcd047 它遵循符号链接并打开文件,但是vim中缓冲区的位置是符号链接的位置而不是物理文件,这意味着就缓冲区而言,它不在 git repo 中,而是在主目录中。
  • 也许尝试将配置 git repos 移动到所有机器上的同一位置?除非你真的,真的想写那个庞大的包装器:)

标签: linux macos vim zsh


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多