:set
работает только с опциями, а ответ sehe демонстрирует несколько хороших примеров использования.
:let
, с другой стороны, может делать почти все, что может :set
, плюс больше Может присвоить значение
- переменная, например
let vi = 'vim'
- вариант, например,
let &tw = 40
- регистр, например
let @a = $HOME . '/vimfiles'
- переменная окружения, например,
let $NOTHING = 'NOTHING'
Другое существенное отличие состоит в том, что правая часть :let
является выражением , что означает, что вы можете выполнять такие вещи, как конкатенация строк (как показано в моем примере регистра выше) и арифметические операции (например, * 1027). *). Это также означает, что вы должны заключить в кавычки значение, если оно является строкой. :set
, с другой стороны, дословно читает значение.
Проще использовать :set
с опциями, хотя :let
также может делать большую часть этого. Вот некоторые сравнения с использованием примеров sehe («н / п» означает, что это невозможно сделать с помощью :let
)
:verbose set
против н / д (не думайте, что есть другой способ перечислить все варианты)
:set tw=40
против :let &tw = 40
(да, вы можете использовать те же сокращения в let
тоже)
:set wrap&
против н / д
:set nowrap
против :let &wrap = 0
(для логических опций 0 равно false, а 1 - true)
:set wrap!
против :let &wrap = !&wrap
Еще несколько примеров
- вывести значение опции:
:set formatoptions?
против :echo &formatoptions
(let
не печатает значения, в отличие от set
)
назначение нескольким параметрам одновременно:
:set et sw=4 sts=4
против
:let [&et, &sw, &sts] = [0, 4, 4]
установить глобальную опцию: setglobal et
против let &g:et = 1
- установить локальную опцию:
setlocal et
против let &l:et = 1
Подробнее см. :h :set
и :h :let
ТЛ; др
:set
работает только с опциями, но синтаксис намного проще. :let
работает не только с опциями, но и с переменными, регистрами и переменными окружения. В отличие от :set
, правая часть :let
является выражением.