Mam dwa bufory w vimie:
:ls
1 %a ".vimrc" line 1
2 #h "script.sh" line 1
Press ENTER or type command to continue
Jak widać powyżej, jestem na pierwszym buforze. Teraz, jeśli wykonam :set softtabstop=16
polecenie, spodziewam się, że wpłynie to na oba bufory. Tak jednak nie jest - podczas gdy sts
wartość pierwszego bufora jest rzeczywiście zmieniana, a Tabklawisz wstawia cztery znaki tabulacji ( ts=4
), a następnie dla drugiego bufora sts
wartość jest nadal 4
:
:ls
1 #h + ".vimrc" line 1
2 %a + "script.sh" line 1
softtabstop=4
Press ENTER or type command to continue
Dlaczego to jest takie? Myślałem, że set
wpływa to na wszystkie bufory i setlocal
wpływa tylko na bufor aktywny.
:setglobal
.'encoding'
.vimscript
wywołań funkcji?setbufvar
którą można wykorzystać do osiągnięcia tego. Na początku nie znalazłem.@Martin nie jest ekspertem, ale po przeczytaniu
:help set
trzeba by „rozbroić” lokalną wartośćsts
w każdym buforze, aby bufor mógł pobrać nową wartość globalną.setlocal sts=
(lub w przypadku flag boolowskichsetlocal flag<
). Trochę ma to sens, ustawienia lokalne są inicjalizowane na bieżące wartości globalne przy otwartym, a następnie zachowują wartości lokalne, dopóki nie zostanie podane inaczej. Jeśli w grze nie ma ustawień lokalnych, powinno ono pobrać nowe wartości globalne.Ponownie, nie będąc ekspertem, zaryzykuję przypuszczenie, że ten drugi bufor miał wyraźne ustawienie lokalne przed późniejszym
set
. Więcej niż 50/50, że moje rozumienie jest błędne, ponieważ jestem jeszcze jasne, na czym polega różnica międzyset
isetglobal
jest .źródło