błąd: Wystąpił problem z edytorem „vi” podczas używania go z git

13

Mam ten dziwny problem z używaniem vijako edytora git commit -a.

Normalny przepływ: piszę git commit -a, vipojawia się, wpisuję komunikat zatwierdzenia, a następnie :wqzapisuję i kończę vi.

To działa dobrze. Czasami jednak piszę literówkę i zamiast tego :wqpiszę :Wq(bo używam klawisza shift :). Następnie, gdy poprawiam się i piszę :wqponownie , pojawia się gitnastępujący błąd:

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

Jak mogę to naprawić?

houbysoft
źródło
Jaka wersja giti vi? Nie mogę tego zrobić z vimem 7.3, git w wersji 1.7.11.1.
Christopher
@Christopher: vi 7.3and git 1.7.9.6 (Apple Git-31.1), the default the Mountain Lion
afaik

Odpowiedzi:

15

viistnieje ze statusem niezerowym, chociaż bez dodatkowych szczegółów na temat konfiguracji trudno jest powiedzieć dlaczego. Jeśli używasz wielu wtyczek vim, możesz spróbować przenieść .vimrcplik do .vimrc.backi sprawdzić, czy możesz się replikować. Istnieje kilka źródeł , które omawiają ten problem, w tym co najmniej jeden z potencjalnym rozwiązania:

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

Spróbowałbym jednak usunąć twój .vimrcpierwszy. Wydaje się, że powoduje to więcej konsternacji.

Krzysztof
źródło
5
Dzięki, git config --global core.editor /usr/bin/vimnaprawiłem to.
houbysoft
1
Rozwiązanie @ applOOb jest lepsze, ponieważ nie jest to hack jak ten.
jefflunt
15

Odpowiedzi tutaj: /programming/22699614/git-commit-messages-lost-by-vi

Prawdziwe rozwiązanie to

git config --global core.editor vim -f

Według dokumentacji vima - -f option should be used when Vim is executed by a program that will wait for the edit session to finish

applOOb
źródło
3
Wreszcie ... to jest właściwe rozwiązanie. Rozwiązuje również problem trafiania :Wi git odrzuca komunikat zatwierdzenia, gdy później go zapisać.
Ryanmt
Rozwiązanie, które w rzeczywistości jest rozwiązaniem, a nie marnym obejściem! Naprawdę mam nadzieję, że osoby, które przeczytają zaakceptowaną odpowiedź, zrozumieją różnicę między ich zwykłym vimwywołaniem a włamaniem, którego używają.
jefflunt
1

Czy korzystasz z wtyczek golang vim? Ten wiersz powoduje dla mnie problem z wartością wyjścia vi: filetype plugin indent off

Usunięcie całego bloku wtyczki golang .vimrcrozwiązało problem. Instalowanie wtyczki golang przy użyciu zbiegów może być tak proste, jak:ln -s $GOROOT/misc/vim ~/.vim/bundle/vim-golang

(Właśnie udokumentowałem problem w tym numerze na githubie vim-golang )

Jan
źródło
0

Coś jest nie tak z konfiguracją Git.

Rozwiązaniem jest zresetowanie konfiguracji Git i zadziałało to dla mnie:

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

$(which vim)jest bardziej elastyczny niż /usr/bin/vim(niektóre pliki wykonywalne vim mogą nie być dostępne)

ericn
źródło