当有符号链接时,在VIM中获取逻辑路径

时间:2009-04-02 07:42:26

标签: vim symlink

我有以下设置:

mkdir /1
mkdir /1/2
mkdir /1/2/3
ln -s /1/2/3 /1/3

如果我cd /1/3,然后pwd,我会/1/3。如果我使用pwd -P,我可以/1/2/3pwd -L强制/1/3

在VIM中,我正在寻找获得/1/3的方法 如果我在/1/3/foo.txt中打开文件,并使用fnamemodify(bufname(winbufnr(0)), ':p:h')之类的内容,则会返回/1/2/3
我如何告诉它给我pwd给出的同一目录?

2 个答案:

答案 0 :(得分:8)

看来你不能通过system('pwd -L')。根据{{​​3}} Vim现在自动解析符号链接。

请参阅:h E773周围的文字了解原理;如果Vim通过符号链接而不是已解析的文件名,则可以在两个不同名称下的两个缓冲区中打开相同的文件,并且Vim会在尝试找出交换文件的位置时感到困惑。另见:h version7.txt

  

Unix:通过符号链接编辑文件时,交换文件将使用该名称   符号链接。现在使用实际文件的名称,以便编辑相同的文件   检测到文件两次。

答案 1 :(得分:1)

简答:

您可以使用mount绑定作为符号链接的替代。见man mount

答案很长:

我遇到了类似的问题,因为我对已安装的分区有一个简短的符号链接

/e -> /media/iam/ext4test

我还有一个符号链接~/.vimrc -> /e/configs/.vimrc

我在试图在包含目录中弹出Netrw时遇到了麻烦(我登陆~但是我无法看到一种强有力的方法来避免这种情况,请记住使用它的愿望书签等)。

我的解决方案是,在考虑可能更改挂载点后,您可以添加挂载点。因此,在unlink e之后,我使用了mount --bind /media/iam/ext4test /e

现在,如果我在/e/configs/.vimrc并使用:edit .(或:e.等),它会弹出我在包含目录中的Netrw。

编辑:

命令mount --bind进行瞬态更改。对于永久绑定装载,我将以下内容添加到/etc/fstab

# <file system>      <mount point>  <type>  <options>  <dump>  <pass>
/media/iam/ext4test  /e             none    bind       0       0