安装了cygwin64,并安装了单独的Gvim 8.0.2。 我可以在bash提示符下打开一个文件,如下所示:
gvim /cygdrive/c/Temp/foo.txt
它有效,因为我的脚本使用cygpath -w /cygdrive/c/Temp/foo.txt
将路径转换为其窗口形式,最后调用gvim.exe C:\Temp\foo.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标准安装中使用它?
答案 0 :(得分:1)
看看file-line plugin的作用。您可以很容易地开发一个基于它的/cygdrive/...
路径转换插件。
不是挂钩*:*
模式,而是使用/cygdrive/*
,然后在Vimscript(substitute()
)中转换路径,或者通过调用外部{{ 1}}工具通过cygpath
。
然后插件用更正的文件名替换无效的当前缓冲区,然后加载它。
答案 1 :(得分:1)
您可以使用'includeexpr'
修改找到的路径:
set includeexpr=substitute(v:fname,'/cygdrive/c','C:/','')
这将改为打开C:/Temp/foo.txt
。
请参阅:help gf
,:help 'includeexpr'
答案 2 :(得分:0)
在过去,我确实试图从vim端快速转换。我最终放弃了,因为有太多的副作用 - 比如不正确的文件类型检测。我们的想法是收听BufCreate
和/或BufNewFile
事件以打开正确的文件并关闭无效文件。这是plugin尝试正确打开file:lineno
- 但有副作用:(
由于我的大多数用例都是在quickfix窗口中打开文件名,我首先想出了cygwin compiler plugin,然后我将其移到了build-tools-wrapper。
答案 3 :(得分:0)
在NTFS中创建硬链接以使这些/ cygdrive / c / path == / c / path == c:/ path等效:
start > cmd >
mkdir c:\cygdrive
mklink /D c:\cygdrive\c c:\
mklink /D c:\cygdrive\d 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