ошибка: возникла проблема с редактором 'vi' при использовании его с git

12

У меня есть эта странная проблема с использованием viв качестве редактора для git commit -a.

Обычный поток: я печатаю git commit -a, viпоявляется, я ввожу свое сообщение о коммите, а затем :wqсохраняю и выхожу из него vi.

Это отлично работает. Тем не менее, иногда я делаю опечатку и вместо того, чтобы :wqпечатать :Wq(потому что я использую Shift для :). Затем, когда я исправляю себя и печатаю :wqснова, gitвыдает следующую ошибку:

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

Как я могу это исправить?

houbysoft
источник
Какая версия gitа vi? Я не могу воспроизвести это с vim 7.3, git version 1.7.11.1.
Кристофер
@Christopher: vi 7.3и git 1.7.9.6 (Apple Git-31.1), стандартные по умолчанию на Mountain Lion afaik
houbysoft

Ответы:

14

viсуществует с ненулевым статусом, хотя без дополнительных подробностей о вашей настройке трудно сказать, почему. Если вы используете много плагинов для vim, вы можете попробовать переместить .vimrcфайл в .vimrc.backи посмотреть, сможете ли вы воспроизвести. Есть несколько источников, которые обсуждают эту проблему, в том числе по крайней мере один с потенциальным решением:

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

Я бы попробовал удалить твою .vimrcпервую, однако. Кажется, это вызывает еще больший ужас.

Кристофер
источник
5
Спасибо, git config --global core.editor /usr/bin/vimисправили это.
Houbysoft
1
Решение @ applOOb лучше, так как это не хак, как этот.
Jefflunt
14

Как ответили здесь: https://stackoverflow.com/questions/22699614/git-commit-messages-lost-by-vi

Настоящее решение состоит в том, чтобы

git config --global core.editor vim -f

Согласно документации vim - -f option should be used when Vim is executed by a program that will wait for the edit session to finish

applOOb
источник
2
Наконец ... это правильное решение. Это также устраняет проблему нажатия :Wи отклонения вашего комита сообщением git при последующем его сохранении.
Ryanmt
Решение, которое на самом деле является решением, а не каким-то неудачным решением! Я действительно надеюсь, что люди, которые читают принятый ответ, понимают разницу между их обычным vimвызовом и взломом, который они используют.
Jefflunt
0

Вы используете плагины golang vim? Эта строка вызывает у меня проблему со значением выхода vi: filetype plugin indent off

Удаление целого блока плагинов golang .vimrcисправило проблему. Установить плагин golang с помощью fugitive можно так же просто, как:ln -s $GOROOT/misc/vim ~/.vim/bundle/vim-golang

(Я только что задокументировал проблему в этом выпуске на github vim-golang )

январь
источник
0

Я думаю, что-то не так с Git config.

Таким образом, решение состоит в том, чтобы сбросить конфиг Git, и он работал для меня:

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

$(which vim)является более гибким, чем /usr/bin/vim(исполняемый файл vim может быть недоступен для некоторых людей)

ericn
источник