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有很多原因。