galat: Ada masalah dengan editor 'vi' saat menggunakannya dengan git

12

Saya punya masalah aneh dengan menggunakan visebagai editor untuk git commit -a.

Aliran normal adalah: Saya mengetik git commit -a, vimuncul, saya memasukkan pesan komit saya, dan kemudian :wqmenyimpan & keluar dari vi.

Ini berfungsi dengan baik. Namun, kadang-kadang saya membuat kesalahan ketik dan bukannya :wqsaya mengetik :Wq(karena saya menggunakan shift untuk :). Kemudian, ketika saya memperbaiki diri sendiri dan mengetik :wqlagi, gitmemberikan kesalahan berikut:

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

Bagaimana saya bisa memperbaikinya?

houbysoft
sumber
Apa versi gitdan vi? Saya tidak dapat repro ini dengan vim 7.3, git versi 1.7.11.1.
Christopher
@Christopher: vi 7.3dan git 1.7.9.6 (Apple Git-31.1), yang standar di Mountain Lion afaik
houbysoft

Jawaban:

14

viada dengan status tidak nol, meskipun tanpa detail tambahan tentang pengaturan Anda, sulit untuk mengatakan mengapa. Jika Anda menggunakan banyak plugin vim, Anda dapat mencoba memindahkan .vimrcfile Anda .vimrc.backdan melihat apakah Anda dapat mereplikasi. Ada beberapa sumber yang membahas masalah ini, termasuk setidaknya satu dengan solusi potensial:

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

Saya akan mencoba menghapus yang .vimrcpertama. Tampaknya menyebabkan lebih banyak kekhawatiran.

Christopher
sumber
5
Terima kasih, git config --global core.editor /usr/bin/vimperbaiki.
houbysoft
1
Solusi @ applOOb lebih baik, karena ini bukan peretasan seperti ini.
jefflunt
15

Seperti yang dijawab di sini: /programming/22699614/git-commit-messages-lost-by-vi

Solusi sebenarnya adalah

git config --global core.editor vim -f

Menurut dokumentasi vim - -f option should be used when Vim is executed by a program that will wait for the edit session to finish

applOOb
sumber
3
Akhirnya ... ini adalah solusi yang tepat. Itu juga memperbaiki masalah memukul :Wdan meminta git menolak pesan komit Anda ketika Anda selanjutnya menyimpannya.
Ryanmt
Solusi yang sebenarnya merupakan solusi dan bukan solusi yang pincang! Saya benar-benar berharap orang-orang yang membaca jawaban yang diterima memahami perbedaan antara vimdoa normal dan retas yang mereka gunakan.
jefflunt
1

Apakah Anda menggunakan plugin golang vim? Baris ini menyebabkan masalah nilai keluar vi bagi saya: filetype plugin indent off

Menghapus seluruh blok plugin golang dalam .vimrcmengatasi masalah. Menginstal plugin golang menggunakan buron dapat semudah:ln -s $GOROOT/misc/vim ~/.vim/bundle/vim-golang

(Saya baru saja mendokumentasikan masalah dalam masalah ini pada vim-golang github )

Jan
sumber
0

Ada yang salah dengan konfigurasi Git, saya kira.

Jadi solusinya adalah mereset Git config dan itu berhasil untuk saya:

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

$(which vim)lebih fleksibel daripada /usr/bin/vim(vim executable mungkin tidak ada untuk beberapa orang)

ericn
sumber