gVim 作为 cygwin 下的 git 编辑器

gVim 作为 cygwin 下的 git 编辑器

我使用 msysgit 并且希望将 gvim 作为我的 git 编辑器。

我使用 cygwin bash 而不是 git bash。

跑步

$ /cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe 

启动 gvim。但如果我将其设置为 git 编辑器:

$ git config core.editor /cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe

并运行提交我得到:

/cygdrive/c/Program Files (x86)/Vim/vim73/gvim.exe: -c: line 0: syntax error near unexpected token `('

然后我在需要的地方添加转义的反斜杠:

$ git config core.editor /cygdrive/c/Program\\\ Files\\\ \\\(x86\\\)/Vim/vim73/gvim.exe

这仍然给我:

/cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe: /cygdrive/c/Program Files (x86)/Vim/vim73/gvim.exe: No such file or directory
error: cannot run /cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe: No such file or directory
error: There was a problem with the editor '/cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe'.

问题是,我可以复制“无法运行”后面的字符串并粘贴它,它就可以运行。我猜这可能是由 Program Files (x86) 中的空格或括号引起的(他们到底在想什么?)。

由于 cygwin 似乎可以很好地处理它,我认为我可以在 /usr/local/bin 中创建一个符号链接,因为它在我的 $PATH 中,并设置

$ git config core.editor /usr/local/bin/gvim

我确认 /usr/local/bin/gvim 启动了 gvim。但是,运行提交后,我得到:

error: cannot spawn /usr/local/bin/gvim.exe: No such file or directory
error: There was a problem with the editor '/usr/local/bin/gvim.exe'.

取消设置 core.editor 并尝试

$ export GIT_EDITOR=/usr/local/bin/gvim.exe 

给了我同样的错误。

所以回答建议我使用脚本来打开编辑器。

我从 /usr/local/bin 中删除软链接 gvim.exe,然后

$ cat > gvim
#!/bin/sh
/cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe

$ chmod u+x gvim

我测试运行该脚本,它运行正常,gvim 启动了。

$ gvim

不幸的是当我运行提交时我收到错误

$ git commit
error: cannot spawn /usr/local/bin/gvim: No such file or directory
error: There was a problem with the editor '/usr/local/bin/gvim'.

我该怎么做才能使用 gVim 作为 git 编辑器?有人试过吗?我犯过错误吗?我必须承认,在 Linux 方面,我是个新手。

答案1

git config 似乎删除了一层引号,因此请添加另一层。这对我来说有效(使用另一个编辑器):

git config core.editor "\"c:/Program Files (x86)/Vim/vim73/gvim.exe\""

(请注意路径周围的转义引号,这会导致编辑器在您执行例如 git commit 时启动为“c:/Program Files (x86)/Vim/vim73/gvim.exe”,因此使用引号告诉 bash shell 不要尝试将 () 解释为它认为的任何意思。)

答案2

当使用路径名中的空格时,通常最好将它们括在引号中。这将解决您的问题:

git config core.editor "/cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe"

答案3

#!/bin/dash -e
if [ "${1#/}" != "$1" ]
then k=$(cygpath -w "$1")
elif [ "$#" != 0 ]
then k=$1
fi
exec gvim ${k+"$k"}
  1. 若无路径,则不通过任何路径

  2. 如果路径为空,则传递空路径

  3. 如果路径是相对的,则按原样传递

  4. 如果路径是绝对路径,则转换为 Windows 格式

然后我设置这些变量:

export EDITOR=gvim.sh
export GIT_EDITOR='dash /usr/local/bin/gvim.sh'
  1. EDITOR 允许脚本与 Git 协同工作

  2. GIT_EDITOR 允许脚本使用中心命令

来源

相关内容