如何在Vim / Gvim中的光标下编辑文件名,当它以/ cygdrive /在Windows中启动时
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Vim / Gvim中的光标下编辑文件名,当它以/ cygdrive /在Windows中启动时相关的知识,希望对你有一定的参考价值。
安装了cygwin64,并安装了单独的Gvim 8.0.2。我可以在bash提示符上打开一个文件,如下所示:
gvim /cygdrive/c/Temp/foo.txt
它的工作原理是因为我的脚本使用cygpath -w /cygdrive/c/Temp/foo.txt
将路径转换为窗口形式,最后调用gvim.exe C:Tempfoo.txt
。
但是在Gvim中,当我的光标在这样的一行上时:
/cygdrive/c/Temp/foo.txt
然后我键入<Ctrl-W> f
,我在Gvim中收到此错误文本:
E447: Can't find file "/cygdrive/c/Temp/foo.txt" in path
我必须做些什么才能在Windows下的标准Gvim安装中工作?
您可以使用'includeexpr'
修改找到的路径:
set includeexpr=substitute(v:fname,'/cygdrive/c','C:/','')
这将打开C:/Temp/foo.txt
而不是。
见:help gf
,:help 'includeexpr'
看看file-line plugin的作用。你可以很容易地开发一个基于它来转换/cygdrive/...
路径的插件。
你可以使用*:*
,然后在Vimscript(/cygdrive/*
)中转换路径,或者通过substitute()
调用外部cygpath
工具,而不是挂钩到system()
模式。
然后,插件用更正的文件名替换无效的当前缓冲区,并加载它。
在过去,我确实试图从vim端快速转换。我最终放弃了,因为有太多的副作用 - 比如不正确的文件类型检测。想法是听BufCreate
and /或BufNewFile
事件打开正确的文件并关闭无效文件。这是一个plugin试图正确打开file:lineno
- 但有副作用:(
由于我的大多数用例都是在quickfix窗口中打开文件名,我首先想出了一个cygwin compiler plugin,然后我把它移到了build-tools-wrapper。
在NTFS中创建硬链接以使这些/ cygdrive / c / path == / c / path == c:/ path等效:
start > cmd >
mkdir c:cygdrive
mklink /D c:cygdrivec c:
mklink /D c:cygdrived d:
cd c:cygwin64
mklink /D c /cygdrive/c
mklink /D d /cygdrive/d
以及如上所述的vimrc for gf
set includeexpr=substitute(v:fname,'^/cygdrive/\(\w\)/','\1:/','')
测试:
echo 123 > c:/x
C:cygwin64> ls -al c:/x /cygdrive/c/x /c/x
-rwxrwxrwx 1 ad None 6 Mar 26 21:47 /c/x
-rw-r--r-- 1 a Users 6 Mar 26 21:47 /cygdrive/c/x
-rw-r--r-- 1 a Users 6 Mar 26 21:47 c:/x
以上是关于如何在Vim / Gvim中的光标下编辑文件名,当它以/ cygdrive /在Windows中启动时的主要内容,如果未能解决你的问题,请参考以下文章