Bagaimana saya bisa membuat Vim mengabaikan semua konfigurasi pengguna, seolah-olah itu baru diinstal?

21

Untuk memastikan bahwa perilaku tidak terpengaruh oleh konfigurasi pribadi saya, saya ingin memulai Vim dengan cara yang mengabaikan semua file konfigurasi yang diinstal pengguna, seolah-olah Vim baru saja diinstal baru untuk pertama kalinya dan pengguna telah menjalankannya segera.

Ini dibahas dalam FAQ yang menunjukkan bahwa jawabannya adalah memulai Vim dengan perintah berikut:

vim -u NONE -U NONE -N -i NONE

Ini mendapatkan sebagian besar jalan di sana, tetapi runtimepathopsi masih berisi ~/.vimdan, terutama,, ~/.vim/after(jadi misalnya jika saya kemudian mengaktifkan deteksi tipe file dan mengubah tipe file, kode di ~/.vim/after/syntax/the_relevant_filetype.vimakan dieksekusi).

Saya dapat mengatasi masalah khusus ini dengan menjalankan perintah berikut saat startup *:

:set runtimepath-=~/.vim
:set runtimepath-=~/.vim/after

... tapi saya tidak yakin apakah:

  1. Ini adalah solusi yang tangguh: Apakah itu satu-satunya jalur yang dapat menyebabkan konfigurasi pengguna berlaku? Apakah ada hal lain yang belum saya pikirkan?
  2. Ada cara yang lebih baik untuk mencapai hasil yang diinginkan.

* Dengan menggunakan --cmdatau -u vimrcshell argumen, atau cukup dengan mengetiknya secara manual.

EDIT : Ini adalah satu contoh spesifik dari jenis masalah yang saya coba untuk perbaiki (Meskipun saya ingin solusi untuk memperbaiki masalah lain yang mungkin saya belum temui.):

  1. Buat file ~ / .vim / after / ftplugin / c.vim, berisi konten:

    noremap i :echom "This is not default behaviour"<CR>
    

    Sekarang kami memiliki beberapa konfigurasi yang dipasang pengguna yang ingin kami abaikan. Mari kita coba solusi yang disarankan oleh FAQ.

  2. Jalankan Vim dengan perintah:

    vim -u NONE -U NONE -N -i NONE
    
  3. Masukkan perintah:

    :filetype plugin on
    :set ft=c
    i
    

Perilaku yang diinginkan : Vim harus masuk ke mode Sisipkan. Inilah yang akan dilakukan jika tidak ada konfigurasi pengguna.

Perilaku yang diamati : Vim mencetak "Ini bukan perilaku default"

Kaya
sumber
Pada sistem mirip Unix, bagaimana jika Anda melakukannya HOME=/dev/null vim -u NONE:?
muru
@muru Ide bagus, dan mungkin layak ditambahkan sebagai jawaban, tapi itu tidak sempurna . Anda jelas kehilangan kemampuan untuk mis :cd ~, tetapi juga lokasi default viminfofile adalah $ HOME, yang dapat menyebabkan E138. Saya kira membuat direktori baru yang kosong dan menggunakannya untuk $ HOME mungkin merupakan solusi terbaik.
Rich
@muru Baru terpikir oleh saya bahwa jika Anda menetapkan $ HOME, maka mungkin Anda juga tidak perlu menentukan -u NONE?
Rich
1
dalam hal mana /tmpmungkin lebih baik, itu adalah pikiran pertama saya, tetapi kemudian saya memilih / dev / null sebagai lubang hitam. ... Atau semacamnya HOME=$(mktemp -d) vim ....
muru
Tidakkah ia akan membaca sistem vimrc jika Anda tidak menggunakannya -u NONE? Tergantung pada perilaku apa yang Anda butuhkan, saya kira.
muru

Jawaban:

16

Pada Vim 8.0.1554 (sayangnya belum Neovim), Anda dapat menggunakan vim --clean. Metode ini direkomendasikan oleh :help bugs.

:help --clean dokumen:

Mirip dengan "-U DEFAULTS -U NONE -i NONE":
- inisialisasi dari file dan variabel lingkungan dilewati
- 'runtimepath' dan 'packpath' diatur untuk mengecualikan entri direktori home (tidak terjadi dengan -u DEFAULTS).
- the | defaults.vim | skrip dimuat, yang menyiratkan 'nocompatible': gunakan Vim defaults
- no | gvimrc | skrip dimuat
- tidak ada file viminfo yang dibaca atau ditulis

jasonzhao
sumber
1
Bagus! Ini jauh lebih sederhana daripada bermain-main dengan $HOMEvariabel. Pengembang Goodjob Vim. Dan terima kasih atas jawabannya!
Rich
1
--cleanjuga bekerja dengan neovimpada master sekarang ( github.com/neovim/neovim/commit/… , untuk dimasukkan dalam 0.4.0), tetapi tidak mengecualikan direktori home.
Christian Clason
(Belum, tambalan itu sedang menunggu untuk diangkut)
Christian Clason
11

Salah satu cara untuk menghilangkan file khusus pengguna adalah dengan menggunakan nilai yang berbeda $HOME. Agar tidak ada yang dapat dibaca, atau ditulis (seperti viminfo), Anda dapat menggunakan /dev/null:

HOME=/dev/null vim -u NONE

Ini akan menyebabkan kesalahan viminfo, jadi, Anda bisa membuat folder sementara, atau menggunakan yang sudah ada (seperti /tmp):

HOME=$(mktemp -d) vim -u NONE

Dengan $HOME, -u NONEmungkin tidak diperlukan, tergantung pada apa yang telah ditambahkan administrator Anda ke seluruh sistem vimrc. Sebagai contoh, pada semua sistem lab saya mengelola, saya menambahkan /etc/vim/vimrc.local(bersumber secara default dikemas Vim ini /etc/vim/vimrc) yang memiliki nocompatible, syntax, dll, set, dan filetype onjuga.

muru
sumber
3
vim -i NONE untuk mencegah memuat viminfo
Christian Brabandt
1

Saya tidak bisa menjawab banyak dari itu tetapi satu hal yang saya tidak lihat disebutkan, dan sedang menjawab interpretasi dari apa yang ada di judul

Bagaimana saya bisa membuat Vim mengabaikan semua konfigurasi pengguna, seolah-olah itu baru diinstal?

beberapa telah menyarankan vim -u NONE atauvim -u NORC

itu dalam beberapa hal barebones sedikit lebih dari sekadar tidak ada file vimrc. Ketika saya mengetik 'i', itu tidak mengatakan 'masukkan'. Anda mungkin ingin itu masih mengatakan 'masukkan'. Jika Anda mulai vim dengan file vimrc Anda kosong maka itu akan menampilkan insert

itu karena vim memuat konfigurasi default terlebih dahulu.

Anda bisa mengarahkan vim ke file default itu untuk mendapatkan efek dari file vimrc Anda kosong. Periksa yang Anda miliki /etc/vim/vimrc, dan Anda dapat melakukannya vim -u /etc/vim/vimrc atau di osx, file defaultnya adalah/usr/share/vim/vicmrc

barlop
sumber
Saya pikir itulah yang akan dilakukan vim --clean untuk Anda.
quemeraisc
@quemeraisc vim --cleanakan memuat defaults.vim. Jawaban ini mengacu pada sistem vimrc (Lihat :help system-vimrc.), Yang saya pikir tidak dimuat oleh vim --clean.
Kaya
@barlap: Untuk menghindari kebingungan dengan defaults.vim (lihat :help defaults.vim), mungkin lebih baik untuk mengubah kata-kata default configuntuk system vimrcdalam jawaban ini. Atau bahkan lebih baik, diskusikan keduanya dalam jawabannya!
Kaya
0

Dari Vim-FAQ 2.5 :

2.5. Saya memiliki masalah "xyz" (beberapa) dengan Vim. Bagaimana saya menentukan itu adalah masalah dengan pengaturan saya atau dengan Vim? / Sudahkah saya menemukan bug di Vim?

Pertama, Anda perlu mencari tahu, apakah kesalahan ada di file runtime aktual atau plugin apa pun yang didistribusikan dengan Vim atau apakah itu merupakan efek samping sederhana dari opsi konfigurasi apa pun dari .vimrc atau .gvimrc Anda. Jadi pertama, mulailah vim seperti ini:

vim -u NONE -U NONE -N -i NONE

ini memulai Vim dalam mode nocompatible (-N), tanpa membaca file viminfo Anda (-i NONE), tanpa membaca file konfigurasi apa pun (-u NONE untuk tidak membaca file .vimrc dan -U NONE untuk tidak membaca file .gvimrc) atau bahkan plugin.

mMontu
sumber
1
Meskipun ada di FAQ, ini sebenarnya tidak berfungsi, karena alasan yang disebutkan dalam pertanyaan.
Kaya
@Rich Dari komentar Anda pada pertanyaan: ensure that none of the behaviour I'm seeing is caused by user config- maka tampak seperti Anda coba lakukan persis apa yang dijelaskan dalam FAQ ini. Saya sudah membaca kembali pertanyaan Anda dan masih belum mengerti alasan apa yang Anda sebutkan.
mMontu
Saya memang berusaha melakukan persis apa yang dijelaskan dalam FAQ. Tetapi solusi yang diberikannya tidak bekerja, karena runtimepathpengaturannya.
Rich
Apa sebenarnya yang salah tentang itu runtimepath? Sepertinya default untuk opsi ini, seperti yang dijelaskan dalam :help rtp. Bagaimana nilai ini memengaruhi tes Anda?
mMontu
@Kaya maksud saya, apakah Anda melihat perbedaan ketika membandingkan dengan instalasi baru setelah Anda mengaktifkan deteksi tipe file?
mMontu