Using vim for git commit messages broken after updating janus


Question or issue on macOS:

After updating the janus vim distribution there appears to be a problem with using vim for commit messages. The best example of this is when doing a git pull to get someone else’s changes. The vim editor is displayed, I type my commit message, I enter :wq but instead of the commit working, I get the following error message:

error: There was a problem with the editor 'vi'.
Not committing merge; use 'git commit' to complete the merge.

I then have to manually commit šŸ™

How do I get git to play nicely with vim?

How to solve this problem?

Solution no. 1:

After a bit of googling, it turns out that the answer is to run the following:

git config --global core.editor $(which vim)

Solution no. 2:

Nat Ritmeyer has given the right solution. I will give you the cause.

As Steve Tooke explained, hiding your ~/.vimrc or explicitly telling git to use the complete path to vim solves the problem. However, he ends with “Iā€™d still like to get to the root of the problem”.

Try this:

  1. Start a git commit to get yourself into a vim editor.
  2. Hit <CTRL> + Z to stop the process and drop back to the TTY
  3. Do a ps and notice for your TTY (whose number you get with the tty command) there is something like…

    $ tty /dev/ttys005 $ ps PID TTY TIME CMD 17547 ttys005 0:00.15 -bash 65126 ttys005 0:00.02 git commit 65127 ttys005 0:00.10 vi .git/COMMIT_EDITMSG $ which vi /usr/bin/vi $ ll /usr/bin/vi lrwxr-xr-x 1 root wheel 3 Oct 3 17:40 /usr/bin/vi -> vim $ jobs [1]+ Stopped git commit 
  4. Get back to your vim process with fg %1 (or what ever stopped job number your git commit is listed as).

What that shell output tells us is…

  1. I was using ttys005
  2. On the TTY bash called git and git called vi
  3. The full path of vi is /usr/bin/vi
  4. The vi command is a symlink to vim
  5. Calling <CTRL> + Z stopped the git commit command and it was #1 in the job stack.

So, vi is the same command as vim?!?! Yes, but vim notices that its argv[0] was vi and runs in compatible mode. This can cause problems depending on what is in your .vimrc.

The best solution is to tell git to use vim, but I suggest you don’t assume that your vim path is the same as everyone elses (maybe you installed via brew install vim)

git config --global core.editor $(which vim)

Solution no. 3:

This could be a plugin or something in your .vimrc file. The best way to load vim in a safe mode for editing commit messages is to use:

git config --global core.editor '/usr/bin/vim -f -u NONE'

Solution no. 4:

I faced the same problem every time I fetched from remote repo and merged it with another branch.

Typing this in terminal fixed it for me

git config --global core.editor $(which vim)

Solution no. 5:

If for some reason, git config --global core.editor /usr/bin/vim doesn’t work, try without the --global flag. I could get it to work only without the --global flag.

Hope this helps!