Ответы:
let
присваивает значение переменной и set
присваивает значение одному из внутренних параметров Vim.
Например, вы бы использовали
:let mystring='Hello!'
объявить новую переменную, но вы бы использовали
:set tabstop=4
или
:set expandtab
установить один из вариантов Vim.
Смотрите также: :help let
, :help set
.
g:
просто означает глобальную переменную. Существует несколько таких «пространств имен переменных» :help internal-variables
:
(nothing) In a function: local to a function; otherwise: global
|buffer-variable| b: Local to the current buffer.
|window-variable| w: Local to the current window.
|tabpage-variable| t: Local to the current tab page.
|global-variable| g: Global.
|local-variable| l: Local to a function.
|script-variable| s: Local to a |:source|'ed Vim script.
|function-argument| a: Function argument (only inside a function).
|vim-variable| v: Global, predefined by Vim.
: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
). ,
let
:let &{option name}=value