8

我有以下设置:

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/3,或者pwd -L给力/1/3

在 VIM 中,我正在寻找一种方法来获取/1/3.
如果我在 中打开一个文件/1/3/foo.txt,并且我使用类似的东西fnamemodify(bufname(winbufnr(0)), ':p:h'),它会返回/1/2/3.
我怎么能告诉它给我相同的目录pwd呢?

4

2 回答 2

9

看来你不能,除了 via system('pwd -L')。根据vim_use 邮件列表, Vim 现在会自动解析符号链接。

请参阅周围的文本以:h E773获取基本原理;如果 Vim 使用符号链接而不是解析的文件名,则可能会在两个缓冲区中以两个不同的名称打开同一个文件,并且 Vim 会因为试图找出交换文件的位置而感到困惑。另见:h version7.txt

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

于 2009-04-02T18:26:45.383 回答
1

简短的回答:

您可以使用挂载绑定来代替符号链接。见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
于 2014-07-17T01:23:23.293 回答