6

I have Git working with Vim in a Powershell environment on my work laptop (Windows 7). It pops up Vim when I commit or use my git vimdiff alias.

I have attempted the same setup under Cygwin (being a Unix guy at heart) but when I type git commit or git vimdiff, Vim does not pop up; seemingly, though, Git is waiting on Vim because the action never completes until I Ctrl-C (after which it takes a minute or so to recover). I can commit with inline commit messages (git commit -m "I would rather type this in Vim") and I can launch Vim/Vimdiff from the terminal with vim and vimdiff. I have my editor set to Vim in multiple places:

$ echo $EDITOR
vim
$ git config --get core.editor
vim

(Initially, I had not explicitly set it in Git, but only in the environment variable, and still had the same problem.)

It appears that I am running Windows Git in Cygwin. Being new to Cygwin, I did not realize this when I first asked the question. I could see how that might cause problems, but after playing around I have not yet been able to fix it.

Has anyone seen this problem before? Any idea how to fix it?

3
  • 1
    did you try setting full path to vim in git config or $EDITOR?
    – skarface
    Aug 30, 2013 at 17:48
  • @skarface Ah: I did in Git, but forgot to go back and do it in EDITOR. Let me try...
    – Kazark
    Aug 30, 2013 at 18:57
  • 1
    @skarface It looks like core.editor has higher priority than EDITOR, so I'm going to stick to modding that. I guess I haven't figured out what the correct full path is for Cygwin Vim though from the perspective of Windows Git running within Cygwin... or do I want to use Windows Vim?
    – Kazark
    Aug 30, 2013 at 19:00

1 Answer 1

10

Thanks to @skarface, I have solved this problem with respect to commiting. First, as I mentioned in the edit to the question, it turned out I was not running Cygwin Git in Cygwin but actual Windows Git. Thus the integration issue makes sense: it is not finding vim or vimdiff.

I had to do:

git config --global core.editor C:/cygwin/bin/vim.exe

I am not sure why the above worked, since:

$ which vim
/usr/bin/vim

but:

$ ls C:/cygwin/usr/bin
ls: cannot access C:/cygwin/usr/bin: No such file or directory

So not sure exactly why that is the path that worked, but it did.


I have now solved it with respect to diffing as well. I had to:

$ git config --global diff.tool vimdiff
$ git config --global difftool.vimdiff.cmd  'C:/cygwin/bin/vim.exe -d "$LOCAL" "$REMOTE"'

This allowed me to start Vimdiff with Git, but there were still some hickups. I could view the files, but the tool itself was failing to diff, giving these errors:

diff errors

It looks like what was happening here is that Git was somehow screwing with Vim's shell option. In my .vimrc, I put this command:

set shell=bash

and now everything works smoothly.

3
  • 1
    On Cygwin, /bin and /usr/bin are one and the same, but Windows doesn't know that and only sees the "real" C:\cygwin\bin. That being said, for better integration, you're better off using Cygwin's git package.
    – Yaakov
    Sep 16, 2013 at 5:16
  • @Yaakov: yeah, probably would be better off with Cygwin Git. The nice thing about using the Windows Git though is that I can do Git-TFS commands with it. When I originally posted the question I didn't realize I was using Windows Git.
    – Kazark
    Sep 16, 2013 at 13:07
  • perfect. that worked for me. +1
    – amphibient
    Nov 19, 2014 at 18:36

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .