Я не знаю много теории Vim. Похоже, что мы set
некоторые переменные и let
другие переменные. Какая разница, и когда один требуется над другим?
Кроме того, соляризованная vim colorscheme говорит о let g:blabla...
том, каково значение g:
в этом случае?
let
:let &{option name}=value
:set
используется для внутренних опций и обрабатывает типы опций. Это позволяет такие вещи, как инвертирование логических опций (например:set invpaste
), добавление и удаление настроек из списка (например:set dictionary-=/tmp/myfile
).:let
с другой стороны, разрешает доступ к множеству изменяемых вещей в vim, включая обычные переменные, опции, регистры и т. д., и устанавливаемое значение является результатом вычисления выражения, а не простого значения, такого как with:set
, что означает:let
дает вам доступ к математике, работе со строками и функциям.Например, вы можете
:let &dictionary=/tmp/myfile
установить опцию'dictionary'
на/tmp/myfile
(таким образом модифицируя ту же опцию, показанную выше в:set
примере)Вы можете установить глобальную переменную с помощью
:let g:myvar=42
. Префикс, о котором вы спрашивали, обеспечивает область действия. Ответ Doorknob очень хорошо охватывает область видимости.Вы можете
:let @a="Some text"
изменить содержимое регистра a на содержимоеSome text
, которое вы позже можете вставить,"ap
например.Вы можете
:let $PATH = $PATH . ":/home/me/bin"
добавить свой собственный каталог bin вPATH
переменную окружения, которая передается любым внешним командам, выполняемым Vim (это работает для любой переменной окружения).Хотя он
let
обладает некоторыми довольно мощными способностями (например,:let $MYFILE = @%
для установки переменной окружения в имени файла текущего буфера), он не знает, что параметр является логическим, поэтому он не предлагает приятного доступа или проверки ошибок, как это:set
делает.В конце концов, речь идет об использовании лучшего инструмента для работы. Если вы хотите просто изменить опцию,
:set
это ваш инструмент. Если вы хотите перемещать информацию между регистрами, опциями, переменными или основывать свое значение на результате выражения, тогда:let
это ваш инструмент.Хотя вы явно задали вопрос о Vim, следует обратить внимание еще на то, что
:set
он более распространен в семействах vi / Vim, где:let
встречается реже (например, nvi не имеетlet
команды, а viemu не предоставляет доступ к регистрам черезlet
). ,источник