我想在我的 cygwin .bashrc 中设置一个别名,将路径名从 unix 转换为 dos,并将它们传递给现有实例新选项卡中的 Windows gvim。我正在尝试使用Luc Hermitte 的 cyg-wrapper 脚本按照这个 vim 技巧Luc 如何使用他的脚本的示例如下:
alias vi= 'cyg-wrapper.sh "C:/Progra~1/Edition/vim/vim63/gvim.exe"
--binary-opt=-c,--cmd,-T,-t,--servername,--remote-send,--remote-expr'
我不明白这个例子,因为大多数 vim 参数(-c、--cmd、--servername、--remote-send、--remote-expr 等)都需要更多信息,而我还没有找到任何如何向 cyg-wrapper.sh 提供附加信息的例子。例如,调用
C:/Progra~1/Edition/vim/vim63/gvim.exe --servername=GVIM
--remote-tab-silent file1 &
将在现有(或不存在)实例 GVIM 的新选项卡中打开 file1,但调用gvim --servername
本身不会完成任何操作。不幸的是,相应的 cyg-wrapper 短语不起作用:
cyg-wrapper.sh "C:/Progra~1/Edition/vim/vim63/gvim.exe"
--binary-opt=--servername=GVIM,--remote-tab-silent --fork=2 file1
如果运行两次,这实际上会打开两个 gvim 实例;就好像服务器名称“GVIM”被剥离并忽略了一样。如何使用 cyg-wrapper.sh提供服务器名称gvim --servername
或 .vimrc ?gvim -u
此外,为什么程序必须以相对晦涩难懂的“混合形式”传递给 cyg-wrapper.sh?例如,如果我尝试
cyg-wrapper.sh "/cygdrive/c/path/to/GVimPortable.exe"
--binary-opt=--servername=GVIM,--remote-tab-silent --fork=2
我收到“无效开关 - “/cygdrive””。
也可以看看:
答案1
关键是不要将键值对选项放在 --binary-opt 中。此处的正确方法是:
cyg-wrapper.sh "C:/Progra~1/Edition/vim/vim63/gvim.exe" --fork=2
--servername=GVIM --remote-tab-silent .bashrc.
传入 vimrc 时会稍微复杂一些。我不知道这一点,但是传入 vimrc 时,-u 参数必须先于其他参数;这:
cyg-wrapper.sh "C:/Progra~1/Edition/vim/vim63/gvim.exe" --fork=2
--servername=GVIM --remote-tab-silent -u ~/.vimrc file1
实际上会打开三个选项卡,一个名为“-u”,一个打开“.vimrc”,一个打开“file1”。要让 Cygwin 和 gvim 在获取指定的 .vimrc 后在新选项卡中打开 file1,您需要:
cyg-wrapper.sh "C:/Progra~1/Edition/vim/vim63/gvim.exe" --fork=2
-u ~/.vimrc --servername=GVIM --remote-tab-silent file1
参数的顺序似乎很重要。我可能错了;我只是通过实验弄清楚了这一点,GVim 文档中没有提到这一点,但我认为首先是 cyg-wrapper.sh 的参数,例如 --fork=2,然后是 vim 的单字母参数,例如 -u ,然后是其他带有双连字符的 vim 参数,最后是要打开的文件列表。