5 ответов:
:setдля параметра опции,:letдля присвоения значений переменная.бывает, что значение параметра связано с именем параметра, перед которым стоит
&(the&option-nameконструкция тогда ведет себя очень похоже на "обычные" переменные). Итак, следующие эквивалентны::set tw=40 :let &tw=40но, например, присвоение 50 глобальной переменной foo (
:let g:foo=50) не может быть достигнуто с помощью (потому что g: foo-это переменная, а не опция).некоторые параметры являются логическими, как. При их установке значение не требуется (как в
:set noicи напротив:set ic).
Set-это более удобный интерфейс, специализированный для опций
например.
:verbose setдля отображения всех параметров в действии.
:set tw=40будет работать как стенография для
set textwidth=40:set wrap&будет установить по умолчанию значение параметра
wrap:set nowrapотключит параметр
:set wrap!будет toggle параметр
самое главное
:setTab #, чтобы получить автодополнение!немногие из вышеперечисленного могут (легко) быть достигнуты с
let.
расширение на то, что люди писали о
:let, Я заметил, что его можно использовать для присвоения значения переменной параметру, что-то:setне могу. Например, эта функция используетletприсвоить значение глобальной переменнойorig_twдо :" Toggle Autowrap " Default of 72 but can be overridden by tw settings in other vimrc files let g:orig_tw = 72 function Toggle_autowrap_mode() if &textwidth == 0 " Must use let instead of set here in order for g:orig_tw to be " evaluated properly let &textwidth = g:orig_tw echo "Autowrap mode on tw=" . &textwidth else let g:orig_tw = &textwidth set textwidth=0 echo "Autowrap mode off tw=" . &textwidth endif endfunction noremap _A :call Toggle_autowrap_mode()<CR>
:setработает только с опционами, и посмотреть тут демонстрирует некоторые хорошие примеры использования.
:letС другой стороны, может делать почти все, что:setможет сделать, а больше. Он может присвоить значение
- переменной, например,
let vi = 'vim'- опции, например,
let &tw = 40- регистр, например,
let @a = $HOME . '/vimfiles'- переменные среды, например,
let $NOTHING = 'NOTHING'еще один крупный разница в том, что правая часть
:let- это выражение, что означает, что вы можете делать такие вещи, как конкатенация строк (как показано в Примере с моим регистром выше) и арифметические операции (например,let &tw = 40 + 60). Это также означает, что вы должны указать значение, если это строка.:setС другой стороны читает значение дословно.это проще в использовании
:setс опциями, хотя:letможно также сделать большую часть этого, вот некоторые сравнения с помощью посмотреть в примеры ("n / a" означает, что это невозможно сделать с:let)
:verbose setvs n/a (не думаю, что есть другой способ перечислить все варианты):set tw=40vs:let &tw = 40(да, вы можете использовать ту же стенографию вletтоже):set wrap&vs n / a:set nowrapvs:let &wrap = 0(для логических параметров 0 равно false, а 1-true):set wrap!vs:let &wrap = !&wrapеще несколько примеры
- выведите значение параметра:
:set formatoptions?vs:echo &formatoptions(letне печатает значения, в отличие отset)назначение нескольких параметров одновременно:
:set et sw=4 sts=4vs
:let [&et, &sw, &sts] = [0, 4, 4]установить глобальный параметр:
setglobal etvslet &g:et = 1- установить локальный вариант:
setlocal etvslet &l:et = 1посмотреть
:h :setи:h :letдополнительные подробности
tl; dr
:setработает только с опционами, но синтаксис намного проще.:letработает не только с опциями, но и с переменными, регистрами и переменными окружения. В отличие от:set, справа от:let- Это выражение.
это очень просто.
Как говорили людиsetдля вариантов и работает лучше из-за ограничения. ТакжеsetЭто историческая команда, что все версииviиспользуйте для установки их параметров. Большинство (все?) другие версииviпока нетlet.но, возможно, самое главное это
setработает на всех версияхvimнаletкоманда может быть опущена при компиляцииvim. Стандартныйtinyиsmallсборках этот.если он отсутствует
letвыдает ошибку:E319: Sorry, the command is not available in this versionПримечание:
ifиendifне реализованы ни вvim.tinyно в этом случае команды не дают ошибки, вместо этого все между двумя командами пропускается в том числеelse.
Comments