2015-06-11 50 views
3

我是一个巨大的vim爱好者,但我无法找到一种方法让vim在打开文件时遵循符号链接。当从命令行打开文件时,使vim遵循符号链接

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

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

我让我的.zprezto的叉私人混帐回购协议,然后将其用于让我所有的Mac/Linux机器和服务器保持同步。每当我在vim中编辑任何这些文件时,我用于git管理的插件都不能正常工作,因为我在调用vim ~/.zshrc时访问的符号链接不在git仓库中。有什么办法强制vim跟着链接,并打开实际的文件,当我从命令行打开它,这样的缓冲区,然后在git回购?

尝试这样:

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

但我所希望的,因为它限制了我一个文件,没有选项时,它并没有正常工作。在我开始写一个可以考虑所有边界情况的大规模封装函数之前,我想知道是否有更明智的做法。

+1

你想解决什么问题? Vim似乎遵循符号链接就好了。 – lcd047

+0

也许愚蠢,但为什么不运行'vim〜/ .zprezto/runco​​ms/zshrc'呢?此外,这个问答可能是相关的(假设我正确理解你的问题):http://stackoverflow.com/questions/708700/getting-the-logical-path-in-vim-when-theres-a-symlink –

+0

@DanCornilescu在发布该问题之前查看了该链接 - 在符号链接目录中运行良好,但不适用于编辑符号链接文件。调用'vim〜/ .zprezto/runco​​ms/zshrc'运行良好,但文件不在每台机器的目录中,而符号链接则位于所有机器上的〜/ .zshrc中。这意味着我可以在任何使用这个git仓库的机器上运行'vim〜/ .zshrc',并且仍然可以获得我想要的文件,而不必首先计算出机器上repo的位置。 –

回答

1

所以它看起来并没有什么内置vim允许这个。我用包装函数玩了一下,结果比我想象的要容易一些。以下是最终结果:

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

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

只需将它添加到您的.zshrc即可使用它。