Mengapa vim mengembalikan kode keluar non-nol jika saya segera keluar setelah membuka?

15

Saya mengalami sedikit masalah aneh vimdengan Snow Leopard: Saya mendapatkan kode keluar bukan nol hanya dari menjalankan vimdan kemudian berhenti.

$ vim
# exit immediately using :q
$ echo $?
1

Namun, jika saya menggunakan path lengkap ke vim, saya tidak melihat perilaku ini

$ /usr/bin/vim
# exit immediately using :q
$ echo $?
0

Awalnya saya pikir vimdatang dari suatu tempat sebelumnya di jalan saya, tetapi:

$ which vim
/usr/bin/vim

Jadi saya bingung. Apa yang menyebabkan ini?

UPDATE: Masalah ini secara ajaib diselesaikan sendiri, yang membuat saya sangat curiga. Teori terbaik saya saat ini adalah bahwa saya memiliki masalah dengan .vimrcplugin saya atau yang saya perbaiki secara tidak sengaja saat mengubah pengaturan saya dengan cara lain. Jika saya dapat melacak apa yang saya lakukan untuk memperbaikinya, saya pasti akan memperbarui dengan info itu. Terima kasih atas jawabannya.

Hank Gay
sumber
Saya memperbaikinya di Makefile dengan menambahkan -u NONE, yang memberitahu vim untuk memuat tidak ada file konfigurasi sama sekali. Mungkin bisa membantu dalam beberapa situasi.
Boldewyn

Jawaban:

14

Apakah Anda memiliki filetype offvimrc? Coba ganti dengan:

filetype on
filetype off

Saya memiliki masalah ini menggunakan Patogen Tim Pope di OS X. Artikel ini membantu saya memecahkan masalah. Jika Anda menggunakan Patogen ...

call pathogen#runtime_append_all_bundles()

... lakukan ini sebagai gantinya:

filetype on
filetype off
call pathogen#runtime_append_all_bundles()
call pathogen#helptags()
filetype plugin indent on

http://andrewho.co.uk/weblog/vim-pathogen-with-mutt-and-git

Brandon Bloom
sumber
Ini poin yang bagus. Saya sudah memperbaiki masalah khusus ini , tetapi itulah yang membuat saya curiga bahwa saya secara tidak sengaja memperbaiki kesalahan di tempat lain di saya .vimrc.
Hank Gay
Ini memperbaiki masalah yang identik bagi saya kecuali dengan Vundle daripada Patogen.
Jonah Braun
Sama seperti menambahkan +1 lainnya, ini adalah perbaikan lama, tetapi itu hanya berfungsi untuk saya memperbaiki masalah ini menggunakan Vundle pada sistem OSX. Hanya melempar di filetype onatas yang sudah ada filetype off.
Mikey TK
8

Saya bisa memikirkan dua penjelasan yang mungkin.

  1. vimsebenarnya adalah alias. Perhatikan bahwa whichtidak menunjukkan alias, Anda harus menggunakan typebukan (kecuali Anda menjalankan csh atau Tcsh).

  2. Vim pergi mencari beberapa file dalam path relatif ke direktori instalasinya, yang ditentukannya dari melihat argv[0](nama executable yang dilewatkan dari shell), dan entah bagaimana gagal menemukan path itu jika dipanggil melalui path relatif. Secara teknis itu mungkin, tapi saya rasa Vim tidak melakukan itu.

Gilles 'SO- berhenti menjadi jahat'
sumber
7

Saya mendapatkan kode keluar bukan nol dari hanya menjalankan vim dan kemudian berhenti.

Itu tidak terjadi di sini, dengan sistem serupa: Snow Leopard, dan versi stok Vim.

Coba perintah ini:

$ sudo dtruss vim +q

Itu akan membuat Anda daftar semua syscalls Vim membuat saat itu menginisialisasi dan kemudian segera dimatikan. ( dtrusssetara dengan stracedi Linux, jika Anda pernah menggunakannya sebelumnya.)

Apa yang Anda cari adalah garis yang dekat dengan akhir yang menunjukkan kode kesalahan, biasanya -1. Melihat argumen untuk panggilan sistem akan membawa Anda ke masalah. Satu kemungkinan kemungkinan tinggi adalah file yang hilang, yang mungkin akan muncul pada open()panggilan.

Jika Vim keluar dengan bersih saat dijalankan dengan cara ini, Anda mungkin memiliki masalah izin, yang sudodiperlukan dtrussuntuk menjalankannya. Dalam hal ini, Anda mungkin dapat memperbaikinya dengan memperbaiki izin .

Warren Young
sumber
Maaf - Saya ada di mesin kerja saya sekarang dan tidak memiliki perilaku ini. Saya pasti akan memeriksanya setelah saya menggunakan mesin di rumah saya lagi.
Hank Gay
Jika Anda tidak bisa mengetahuinya, tambahkan dtrussoutput untuk pertanyaan Anda. (Atau setidaknya, 25 baris terakhir atau lebih.) Apa yang tidak dapat Anda pahami dapat mengarahkan orang lain ke jawaban yang benar.
Warren Young
@ nlucaroni: Senang mendengarnya. Untuk anak cucu, yang dari dua ide dalam jawaban saya tetap? Yaitu, apakah Anda memiliki masalah izin yang sudo"diperbaiki", memberi tahu Anda bahwa Anda perlu menjalankan Izin Perbaikan? Atau apakah itu lebih dtrussmenunjukkan kesalahan syscall, dan jika demikian, yang mana dan mengapa itu gagal?
Warren Young
kesalahan syscall dalam membuka file yang tidak ada di sana. Rekan kerja saya baru saja mengambil .vimdirektori zipp'd seseorang dan .vimrc, dan semuanya memiliki path lengkap dan file yang hilang dari plugin yang tidak digunakan.
nlucaroni
2

Saya mendapatkan masalah kode pengembalian ini. Saya melacaknya kembali ke loadviewperintah eksekusi diam-diam di vimrc saya yang memberikan pandangan gigih:

" Persistent views
if has("mksession")
    set viewdir=$HOME/.vimviews
    if has("unix")
        silent execute '!mkdir -p $HOME/.vimviews'
    endif
    au BufWinLeave * silent! mkview "make vim save view (state) (folds, cursor, etc)
    au BufWinEnter * silent! loadview "make vim load view (state) (folds, cursor, etc)
endif

Saat memasukkan buffer tanpa nama file, itu silent! loadviewakan mengeksekusi, menyembunyikan kesalahan

E32: Tidak ada nama file

yang juga menyebabkan kode kembali diatur ke satu.

David Thomas
sumber