Vim 当存在';这是一个符号链接

Vim 当存在';这是一个符号链接,vim,symlink,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/3,或者pwd-L来强制/1/3 在VIM中,我正在寻找一种方法来获取/1/3 如果我在/1/3/foo.txt中打开一个文件,并使用类似fnamemodify(bufname(winbufnr(0)),':p:h'),它将返回/1/2/3 我怎么能告诉它给我与pwd相同的目录呢?除了

我有以下设置:

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
相同的目录呢?

除了通过
系统('pwd-L')
之外,你似乎不能。根据Vim,现在自动解析符号链接

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

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

简短答复: 您可以使用挂载绑定代替符号链接。请参见
载人安装

长答覆: 我有一个类似的问题,因为我有一个到挂载分区的短符号链接

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

我在尝试跳入包含目录中的Netrw时遇到了麻烦(我是在
~
中登录的,但是我没有找到一种可靠的方法来避免这种情况,记住使用书签的愿望,等等)

我的解决方案是,在考虑可能更改装载点之后,可以添加装载点。所以在
取消e
链接后,我使用了
装载--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
#
/媒体/iam/ext4test/e无绑定0

您可能想在您试图做的事情的“为什么”部分进行编辑,因为vim的行为在我看来是正确的。这是一个复杂的构建系统(基于clearcase),其中主要源代码位于/code/comp/subcomp/src中,但工作树位于/tree/tree1/build/comp中。好的,接下来的问题。如果我使用“vim1/3/foo.txt”运行vim,我如何使用系统('pwd-L')?如果我使用cd%:p:h切换到目录,我已经跳入了symlink/1/2/3/Yeah如果你将:cd切换到目录中,我不知道此时你能做些什么。你可以做一些可怕的事情,比如system('cd')。expand('%:h')。“pwd-L')before:cd'ing Vim本身,但不确定你使用它做什么,这可能是不够的。一般来说,这是一个有用的替代方法,但它(a)需要根权限,(b)不适合许多不同的映射。在最初的问题中,这是一个在共享服务器上构建的系统,可能有50个甚至500个源代码树,所以这不相关。我很懒,我应该问一个新的问题和答案,但你的问题至少有一些我使用的搜索词。因为我的部分答案就在这里,也就是说,Vim不能很好地处理我期望它的行为,所以我将我的解决方法添加到这一页上。这里有个笑话:你试过Emacs吗?通过符号链接,它可以实现您所期望的功能。(当然,我没有资格考虑住宿等)JK。我确信你使用VIM有很多原因。