我希望真正了解 Vim 的人可以帮助我解决这个问题。我在 Windows 10 笔记本电脑上使用 MSWin32-64 版本的 Gvim。我安装了 Cygwin。我可以从 Cygwin bash shell 启动 Gvim,并且 Gvim 继承了 bash 的环境,最值得注意的是 $PATH。我解释这一点是因为我希望避免诸如“你为什么要这样做”之类的烦人评论。现在我来解释一下这个问题。
Gvim 命令行上的 ! 打开一个新终端,shell ($SHELL, &shell) 执行 ! 之后命令行上的所有内容。在 _vimrc 中,我让&shell=bash和让$SHELL=/full/path/to/shell。
好吧,如果 Gvim 的 cwd 与当前缓冲区的目录 (%) 相同,那么这个方法就没问题。但如果不同,Vim 会将 % 传递为 ..\parent\subdir\buffer.bla。我找不到解决这个问题的方法。我可以更改斜杠的方向:
:echom substitute(@% ,"\\", "/", "g")
但是 bang 忽略了这一点。它根本不做任何插值。好吧,还有 system()。它允许我插入一个参数,例如 result = system(substitute(@% ,"\", "/", "g")),但我想在新终端中查看所有输出、错误消息等,而 system 不执行终端(即它在后台运行一个新进程并返回程序的标准输出)。
就这样。