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

问题描述 投票:1回答:4

安装了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安装中工作?

vim cygwin
4个回答
1
投票

您可以使用'includeexpr'修改找到的路径:

set includeexpr=substitute(v:fname,'/cygdrive/c','C:/','')

这将打开C:/Temp/foo.txt而不是。

:help gf:help 'includeexpr'


1
投票

看看file-line plugin的作用。你可以很容易地开发一个基于它来转换/cygdrive/...路径的插件。

你可以使用*:*,然后在Vimscript(/cygdrive/*)中转换路径,或者通过substitute()调用外部cygpath工具,而不是挂钩到system()模式。

然后,插件用更正的文件名替换无效的当前缓冲区,并加载它。


0
投票

在过去,我确实试图从vim端快速转换。我最终放弃了,因为有太多的副作用 - 比如不正确的文件类型检测。想法是听BufCreateand /或BufNewFile事件打开正确的文件并关闭无效文件。这是一个plugin试图正确打开file:lineno - 但有副作用:(

由于我的大多数用例都是在quickfix窗口中打开文件名,我首先想出了一个cygwin compiler plugin,然后我把它移到了build-tools-wrapper


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
© www.soinside.com 2019 - 2024. All rights reserved.