Область действия Vim: глобально-локально, локально и глобально - PullRequest
0 голосов
/ 20 марта 2020

Справочная документация Vim на |options| делает различия между опциями и значениями опций; и между глобальными, локальными и глобально-локальными вариантами. Это очень запутанно, особенно учитывая |local-options|:

"Возможно установить опцию локального окна специально для типа буфера .... Vim сохраняет глобальное значение опций локального окна, которое используется при редактировании другого буфера. Каждое окно имеет свою собственную копию этих значений. Таким образом, они являются локальными для окна, но глобальными для всех буферов в окне. "

В следующем примере показано, что :setlocal list делает опцию локального окна локальной для буфера. Но как насчет глобальных или глобально-локальных опций окна?

Может кто-нибудь объяснить причину различий в терминологии между опциями и значениями и между тремя типами опций?

1 Ответ

1 голос
/ 21 марта 2020

Ну, это довольно просто, ИМО. Подумайте, для чего используется опция.

Скажем, confirm является глобальным, поскольку имеет смысл для каждого экземпляра Vim. Следовательно, даже если вы выполните setlocal confirm, это автоматически изменит глобальную опцию, поскольку она является единственной существующей.

Далее, expandtab локально для буфера (примечание: некоторые опции могут быть локальными для окна например, :h 'diff'). Тем не менее, существует как глобальный expandtab (который по сути является «текущим значением по умолчанию» expandtab для вновь создаваемых буферов), так и локальный expandtab (по одному на каждый существующий буфер). Также обратите внимание, что некоторые «значения по умолчанию» в значительной степени бесполезны (например, filetype будет установлен ftdetect в любом случае, но, тем не менее, глобальный filetype существует).

Теперь, что является глобально-локальным предмет? Это просто опция, которая может (или не может) создаваться для каждого существующего буфера. Но, конечно, всегда есть глобальная опция такого типа.

Чем она отличается от обычной локальной опции? Скажем, у вас есть в вашем vimr c:

setglobal noexpandtab noautoread

Теперь вы запускаете Vim и вводите:

:setlocal expandtab? autoread?

И затем вы получаете в ответ:

noexpandtab
--autoread

Это означает, что у вас есть локальная копия буфера вашего глобального expandtab, но локальный autoread вообще не был создан в текущем буфере, поэтому Vim будет использовать глобальное значение, каким бы оно ни было be.

Подводя итог сказанному выше:

  1. «Глобальная опция» означает, что локального значения не существует вообще. Поэтому глобальное значение всегда используется.

  2. «Локальная опция» означает, что все буферы (или windows) всегда имеют свою собственную копию, и поэтому «глобальное» значение имеет смысл только в качестве значения по умолчанию.

  3. «Глобальный локальный параметр» означает, что некоторые буферы (или windows) могут иметь свою копию, а другие - нет. Поэтому Vim использует текущий локальный параметр, если он установлен, в противном случае он использует глобальный параметр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...