如何在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端快速转换。我最终放弃了,因为有太多的副作用 - 比如不正确的文件类型检测。想法是听BufCreateand /或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中启动时的主要内容,如果未能解决你的问题,请参考以下文章

第四周总结

ubuntu下定制Vim/Gvim及使用技巧

Windows下,gVim编辑,Python2应用程序的乱码问题

生命不息,折腾不止~Vim编辑器配置(2018)

GVIM中文乱码问题(文本及菜单乱码)

gvim初学命令记录