Saya memiliki dua buffer di vim:
:ls
1 %a ".vimrc" line 1
2 #h "script.sh" line 1
Press ENTER or type command to continue
Seperti yang terlihat di atas, saya berada di buffer pertama. Sekarang jika saya menjalankan :set softtabstop=16
perintah, maka saya berharap itu akan mempengaruhi kedua buffer. Namun, ini bukan kasus- sementara sts
nilai untuk buffer pertama memang berubah dan Tabkunci memasukkan empat karakter tab ( ts=4
), maka untuk buffer kedua sts
nilainya masih 4
:
:ls
1 #h + ".vimrc" line 1
2 %a + "script.sh" line 1
softtabstop=4
Press ENTER or type command to continue
Kenapa begitu? Saya pikir itu set
mempengaruhi semua buffer dan setlocal
hanya mempengaruhi buffer aktif ..
:setglobal
.'encoding'
.vimscript
panggilan fungsi?setbufvar
yang bisa digunakan untuk mencapai itu. Awalnya tidak ditemukan.Bukan ahli, @Martin, tetapi dari membaca
:help set
Anda perlu "menghapus" nilai lokalsts
di setiap buffer agar buffer mengambil nilai global baru.setlocal sts=
(atau untuk bendera boolean,setlocal flag<
). Agak masuk akal, pengaturan lokal diinisialisasi ke nilai-nilai global saat ini terbuka, kemudian pertahankan nilai-nilai lokal sampai dikatakan sebaliknya. Jika tidak ada pengaturan lokal dalam permainan, itu harus mengambil nilai global baru.Sekali lagi, tidak menjadi ahli, saya akan menebak bahwa buffer kedua memiliki pengaturan lokal yang eksplisit sebelum nanti
set
. Lebih dari 50/50 pemahaman saya salah, karena saya masih tidak jelas tentang apa perbedaan antaraset
dansetglobal
itu .sumber