Пробовали ли вы :help setи :help letи прочитать руководство?
hochl 03
5
да, я сделал это, но я до сих пор не понимаю, почему должен существовать set, потому что let делает то же самое.
Дэйв Холтер,
1
@DavidHalter: letне делает то же самое. Есть вещи, которых нельзя достичь, но с setкоторыми можно добиться let, см. Мой ответ.
René Nyffenegger
4
setlocalЕще никто не упомянул ... они эквивалентны &l:*переменным.
Крис Морган
1
@VictorZamanian: для логических настроек, возможно, проще просто set noicили set ic. Насколько я знаю, setтоже совместим с viкоторым let, как я полагаю , нет.
Рене Ниффенеггер
Ответы:
152
:setпредназначен для настройки параметров , :letдля присвоения значения переменной .
Бывает, что значение параметра связано с именем параметра, перед которым стоит a &( &option-nameконструкция тогда ведет себя очень похоже на «обычные» переменные). Итак, следующие эквиваленты:
:set tw=40
:let &tw=40
Но, например, присвоение 50 глобальной переменной foo ( :let g:foo=50) не может быть достигнуто с помощью :setкоманды (потому что g: foo - это переменная, а не опция).
Некоторые параметры похожи на логические. При их установке значение не требуется (как :set noicи наоборот :set ic).
re:, :set nowrapoptions.txt (: help set-option) говорит:: se [t] {option} Переключить параметр: установить, включить. Вариант числа: показать значение. Строковый вариант: показать значение. Это не согласуется с тем, что у вас здесь, когда вы говорите «установит значение по умолчанию для переноса опций». ??
Эллиптический вид
@Ellipticalview Я немного запутался. Вы цитируете часть документации. Если вы прочитаете все, то обнаружите, что оно соответствует всем моим случаям. [Примечание: параметры с no-префиксом могут сбивать с толку. Также в заметке option&есть трейлинг, &который вы могли пропустить.]
см
13
:setработает только с параметрами, и в этом ответе приведены несколько хороших примеров использования.
:letс другой стороны, может делать почти все, что :setумеет, плюс многое другое. Он может присвоить значение
переменная, например let vi = 'vim'
вариант, например let &tw = 40
регистр, например let @a = $HOME . '/vimfiles'
переменная среды, например let $NOTHING = 'NOTHING'
Еще одно важное отличие состоит в том, что правая часть :let- это выражение , что означает, что вы можете делать такие вещи, как конкатенация строк (как показано в моем примере с регистром выше) и арифметические операции (например let &tw = 40 + 60). Это также означает, что вы должны заключить значение в кавычки, если это строка. :setс другой стороны, читает значение дословно.
С :setопциями проще использовать , хотя он :letтакже может делать большую часть из них. Вот некоторые сравнения с использованием примеров sehe («н / д» означает, что это невозможно сделать :let)
:verbose set vs n / a (не думаю, что есть другой способ перечислить все варианты)
:set tw=40vs :let &tw = 40(да, вы также можете использовать то же сокращение let)
напечатать значение опции: :set formatoptions?vs :echo &formatoptions( letне печатает значения, в отличие от set)
одновременное назначение нескольким параметрам:
:set et sw=4 sts=4
против
: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- это выражение.
Расширяя то, о чем люди писали :let, я заметил, что его можно использовать для присвоения значения переменной параметру, чего :setнельзя сделать. Например, эта функция используется letдля присвоения значения в глобальной переменной orig_twк textwidthопции:
" 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>
Сводка:let позволяет назначать переменную опции: let &textwidth = g:orig_twи наоборот.
Serge Stroobandt
2
Все очень просто.
Как говорили люди, 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.
:help set
и:help let
и прочитать руководство?let
не делает то же самое. Есть вещи, которых нельзя достичь, но сset
которыми можно добитьсяlet
, см. Мой ответ.setlocal
Еще никто не упомянул ... они эквивалентны&l:*
переменным.set noic
илиset ic
. Насколько я знаю,set
тоже совместим сvi
которымlet
, как я полагаю , нет.Ответы:
:set
предназначен для настройки параметров ,:let
для присвоения значения переменной .Бывает, что значение параметра связано с именем параметра, перед которым стоит a
&
(&option-name
конструкция тогда ведет себя очень похоже на «обычные» переменные). Итак, следующие эквиваленты:Но, например, присвоение 50 глобальной переменной foo (
:let g:foo=50
) не может быть достигнуто с помощью:set
команды (потому что g: foo - это переменная, а не опция).Некоторые параметры похожи на логические. При их установке значение не требуется (как
:set noic
и наоборот:set ic
).источник
Set - это более удобный интерфейс, специализированный для опций
Например
для отображения всех действующих параметров.
Будет работать как сокращение для
set textwidth=40
Устанавливает значение по умолчанию для опции
wrap
Отключит опцию
Будет ли переключить опцию
Самое главное,
Мало что из вышеперечисленного можно (легко) достичь с помощью
let
.источник
:set nowrap
options.txt (: help set-option) говорит:: se [t] {option} Переключить параметр: установить, включить. Вариант числа: показать значение. Строковый вариант: показать значение. Это не согласуется с тем, что у вас здесь, когда вы говорите «установит значение по умолчанию для переноса опций». ??no
-префиксом могут сбивать с толку. Также в заметкеoption&
есть трейлинг,&
который вы могли пропустить.]:set
работает только с параметрами, и в этом ответе приведены несколько хороших примеров использования.:let
с другой стороны, может делать почти все, что:set
умеет, плюс многое другое. Он может присвоить значениеlet vi = 'vim'
let &tw = 40
let @a = $HOME . '/vimfiles'
let $NOTHING = 'NOTHING'
Еще одно важное отличие состоит в том, что правая часть
:let
- это выражение , что означает, что вы можете делать такие вещи, как конкатенация строк (как показано в моем примере с регистром выше) и арифметические операции (напримерlet &tw = 40 + 60
). Это также означает, что вы должны заключить значение в кавычки, если это строка.:set
с другой стороны, читает значение дословно.С
:set
опциями проще использовать , хотя он:let
также может делать большую часть из них. Вот некоторые сравнения с использованием примеров sehe («н / д» означает, что это невозможно сделать:let
):verbose set
vs n / a (не думаю, что есть другой способ перечислить все варианты):set tw=40
vs:let &tw = 40
(да, вы также можете использовать то же сокращениеlet
):set wrap&
против н / д:set nowrap
vs:let &wrap = 0
(для логических параметров 0 - ложь, а 1 - истина):set wrap!
против:let &wrap = !&wrap
Еще несколько примеров
:set formatoptions?
vs:echo &formatoptions
(let
не печатает значения, в отличие отset
)одновременное назначение нескольким параметрам:
против
установить глобальную опцию:
setglobal et
vslet &g:et = 1
setlocal et
vslet &l:et = 1
Смотрите
:h :set
и:h :let
для более подробной информацииtl; dr
:set
работает только с опциями, но синтаксис намного проще.:let
работает не только с параметрами, но и с переменными, регистрами и переменными среды. В отличие от этого:set
, правая часть:let
- это выражение.источник
Расширяя то, о чем люди писали
:let
, я заметил, что его можно использовать для присвоения значения переменной параметру, чего:set
нельзя сделать. Например, эта функция используетсяlet
для присвоения значения в глобальной переменнойorig_tw
кtextwidth
опции:источник
let
позволяет назначать переменную опции:let &textwidth = g:orig_tw
и наоборот.Все очень просто.
Как говорили люди,
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
.источник