Mengapa vim tidak akan mencari file .vimrc saya

9

Hari ini, saya menemukan saya .vimrctidak berpengaruh. Itu baik-baik saja beberapa jam yang lalu.

Ketika saya meluncurkan vim with $vim --plugin, :scriptnamesechoed nothing: .vimrcfile tidak bersumber. (Catatan: /etc/vimrctelah dihapus untuk men-debug masalah ini.)

Kemudian saya mencoba google dan menemukan $VIMINITvariabel yang mencurigakan.

Inilah nilai dari $VIMINIT:

$ echo $VIMINIT
set number

Dokumentasi Vim tentang VIMINIT:

 c. Four places are searched for initializations.  The first that exists
    is used, the others are ignored.  The $MYVIMRC environment variable is
    set to the file that was first found, unless $MYVIMRC was already set.
    -  The environment variable VIMINIT (see also |compatible-default|) (*)
       The value of $VIMINIT is used as an Ex command line.
    -  The user vimrc file(s):
                "$HOME/.vimrc"      (for Unix and OS/2) (*)
                "s:.vimrc"          (for Amiga) (*)
                "home:.vimrc"       (for Amiga) (*)
                "$VIM/.vimrc"       (for OS/2 and Amiga) (*)
                "$HOME/_vimrc"      (for MS-DOS and Win32) (*)
                "$VIM/_vimrc"       (for MS-DOS and Win32) (*)
            Note: For Unix, OS/2 and Amiga, when ".vimrc" does not exist,
            "_vimrc" is also tried, in case an MS-DOS compatible file
            system is used.  For MS-DOS and Win32 ".vimrc" is checked
            after "_vimrc", in case long file names are used.
            Note: For MS-DOS and Win32, "$HOME" is checked first.  If no
            "_vimrc" or ".vimrc" is found there, "$VIM" is tried.
            See |$VIM| for when $VIM is not set.
    -  The environment variable EXINIT.
       The value of $EXINIT is used as an Ex command line.
    -  The user exrc file(s).  Same as for the user vimrc file, but with
       "vimrc" replaced by "exrc".  But only one of ".exrc" and "_exrc" is
       used, depending on the system.  And without the (*)!

Saya tidak dapat memahami dokumentasi vim sepenuhnya. Tampaknya $VIMINITdapat mengacaukan startup vim.

Jelas $VIMINIT:

$ VIMINIT=
$ echo $VIMINIT

Masalah masih ada.

Feng Yu
sumber
2
"Yang pertama yang digunakan, yang lain diabaikan." $VIMINITmemiliki preseden atas .vimrcfile apa pun . Dan itu memenuhi aturan pertama datang pertama dilayani. Jadi ya .vimrcdiabaikan.
Sukima

Jawaban:

10

Memperluas jawaban @ mMontu; Vim mencari inisialisasi dalam urutan daftar itu sampai menemukan satu. Karena $VIMINITvariabel didahulukan ke .vimrcfile, itu memuaskan pencarian dan opsi lain setelah itu diabaikan .

Alasannya masih belum berhasil setelah:

$ VIMINIT=
$ echo $VIMINIT

Apakah (1) Anda menetapkan variabel lokal, bukan variabel lingkungan. Yang perlu diekspor:

$ export VIMINIT=

(2) ini masih tidak berfungsi karena VIMINITmasih didefinisikan:

$ printenv | grep VIMINIT
VIMINIT=

Apa yang perlu terjadi adalah penghapusan dari lingkungan bersama-sama:

$ unset VIMINIT
$ printenv | grep VIMINIT || echo "Gone"
Gone

(Perintah ini khusus untuk Bash. Ubah sesuai dengan shell pilihan Anda jika perlu.)

Sukima
sumber
Tapi ini hanya berfungsi untuk satu sesi, bagaimana dengan tidak menyetelnya dengan pasti? atau mungkin mencari di mana set variabel, sehingga Anda dapat pergi dan menghapusnya?
Feng Yu
8

Anda mungkin salah mengerti dokumentasi:

 c. Four places are searched for initializations.  The first that exists
    is used, the others are ignored.

Jadi jika Anda menggunakan VIMINIT, vimrc tidak akan dimuat.

-  The environment variable VIMINIT (see also |compatible-default|) (*)
   The value of $VIMINIT is used as an Ex command line.

Anda menyetel $ VIMINIT ke perintah Ex set number, yang tidak apa-apa menurut dokumen. Tetapi jika lebih suka vimrc, Anda harus memasukkan set numberpada file itu daripada menggunakan $ VIMINIT. Anda menyebutkan bahwa Anda mengaturnya menjadi kosong dan vimrc Anda masih belum dimuat, tetapi Anda sebenarnya harus menghapus variabel.

mMontu
sumber