error: hubo un problema con el editor 'vi' al usarlo con git

Tengo este extraño problema con viel uso como editor de git commit -a.

El flujo normal es: escribo git commit -a, viaparece, ingreso mi mensaje de confirmación y luego :wqguardo y salgo de vi.

Esto funciona bien. Sin embargo, a veces cometo un error tipográfico y en lugar de :wqescribir :Wq(porque uso el cambio para :). Luego, cuando me corrijo y :wqvuelvo a escribir, gitda el siguiente error:

error: There was a problem with the editor 'vi'.
Please supply the message using either -m or -F option.

¿Cómo puedo arreglar esto?

¿Qué versión de gity vi? No puedo reproducir esto con vim 7.3, git versión 1.7.11.1.
@Christopher: vi 7.3y git 1.7.9.6 (Apple Git-31.1), los predeterminados en Mountain Lion afaik

Respuestas (4)

viexiste con un estado distinto de cero, aunque sin detalles adicionales sobre su configuración, es difícil saber por qué. Si está utilizando muchos complementos para vim, puede intentar mover su .vimrcarchivo .vimrc.backy ver si puede replicarlo. Hay algunas fuentes que analizan este problema, incluida al menos una con una posible solución:

git config --global core.editor /usr/bin/vim

Sin embargo, intentaría eliminar el .vimrcprimero. Parece causar más consternación.

Gracias, git config --global core.editor /usr/bin/vimlo arreglé.
La solución de @applOOb es mejor, ya que no es un truco como este.

Como se respondió aquí: https://stackoverflow.com/questions/22699614/git-commit-messages-lost-by-vi

La verdadera solución es

git config --global core.editor vim -f

De acuerdo con la documentación de vim --f option should be used when Vim is executed by a program that will wait for the edit session to finish

Finalmente... esta es la solución correcta. También soluciona el problema de presionar :Wy hacer que git rechace su mensaje de confirmación cuando lo guarde posteriormente.
¡Una solución que en realidad es una solución y no una solución poco convincente! Realmente espero que las personas que lean la respuesta aceptada comprendan la diferencia entre su viminvocación normal y el truco que están usando.
@applOOb podría necesitar usar comillas allí: git config --global core.editor 'vim -f'de lo contrario -f, no se incluirán.

¿Utiliza los complementos golang vim? Esta línea me está causando el problema del valor de salida de vi:filetype plugin indent off

Eliminar todo el bloque del complemento golang .vimrcsolucionó el problema. Instalar el complemento golang usando fugitive puede ser tan fácil como:ln -s $GOROOT/misc/vim ~/.vim/bundle/vim-golang

(Acabo de documentar el problema en este número en vim-golang github )

Algo está mal con la configuración de Git, supongo.

Entonces, la solución es restablecer la configuración de Git y funcionó para mí:

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

$(which vim)es más flexible que /usr/bin/vim(vim ejecutable puede no estar allí para algunas personas)