Чи впливає команда “set” лише на активний буфер?


14

У мене два буфери vim:

:ls
  1 %a   ".vimrc"                       line 1
  2 #h   "script.sh"                    line 1
Press ENTER or type command to continue

Як видно вище, я перебуваю на першому буфері. Тепер, якщо я виконую :set softtabstop=16команду, тоді я очікую, що вона вплине на обидва буфери. Однак це не так - тоді як stsзначення для першого буфера дійсно змінюється і Tabключ вставляє чотири символи вкладки ( ts=4), то для другого буфера stsзначення все одно 4:

:ls
  1 #h + ".vimrc"                       line 1
  2 %a + "script.sh"                    line 1
  softtabstop=4
Press ENTER or type command to continue

Чому це так? Я вважав, що це setвпливає на всі буфери і setlocalвпливає тільки на активний буфер.

Відповіді:


25

Параметри можуть бути глобальними , локальними віконними або буферними .

Коли ви глобальний параметр, нове значення глобальне .:set

Коли ви глобальний параметр, нове значення локальне .:setlocal

Коли ви локальний варіант, нове значення локальне .:set

softtabstopбудучи локальною буферною опцією, зміна його значення впливає лише на поточний буфер.

"Обсяг" опції вказаний у :help option:

'softtabstop' 'sts'    number    (default 0)
                       local to buffer
                       {not in Vi}
Number of spaces that a <Tab> counts[...]

:help local-options, :help :setlocalта :help global-localпоясніть все це більш докладно.


3
Там також є :setglobal.
Сато Кацура

3
Також деякі варіанти є глобальними, незалежно від того, як ви їх встановили. Напр 'encoding'.
Антоній

Чи є спосіб встановити локальну функцію за допомогою ідентифікатора буфера та значення параметра за допомогою деякого vimscriptвиклику функції?
Санкт-Антаріо

Існує функція, setbufvarяку можна використовувати для досягнення цього. Не знайшов його спочатку.
Санкт-Антаріо

2

Не експерт, @Martin, але, прочитавши, :help setвам потрібно буде "зняти" місцеве значення stsкожного буфера, щоб цей буфер підбирав будь-яке нове глобальне значення. setlocal sts= (або для булевих прапорів setlocal flag<). Ніби має сенс, локальні параметри, ініціалізовані до поточних глобальних значень, відкриті, а потім зберігати локальні значення, поки не сказано інше. Якщо в грі відсутня локальна установка, вона повинна підбирати будь-які нові глобальні значення.

Знову ж таки, не будучи експертом, я б ризикнув здогадатися, що цей другий буфер мав явні локальні налаштування перед пізнішим set. Більше 50/50, що я розумію неправильно, тому що мені все ще не зрозуміло, у чому різниця між setі setglobalв чому .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.