如何在Vim / Gvim中的光标下编辑文件名,当它以/ cygdrive /在Windows中启动时

时间:2016-11-03 09:54:23

标签: vim cygwin

安装了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标准安装中使用它?

4 个答案:

答案 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