Próbowałaś :help seti :help leti czytać podręcznik?
hochl
5
Tak, zrobiłem to, ale nadal nie rozumiem, dlaczego zestaw ma istnieć, bo zróbmy to samo.
Dave Halter
1
@DavidHalter: letnie robi tego samego. Są rzeczy, których nie możesz osiągnąć, a setktóre są możliwe let, zobacz moją odpowiedź.
René Nyffenegger
4
Nikt setlocaljeszcze nie wspomniał ... są one równoważne &l:*zmiennym.
Chris Morgan,
1
@VictorZamanian: w przypadku ustawień logicznych prawdopodobnie łatwiej jest po prostu set noiclub set ic. O ile wiem, setjest również kompatybilny z viktórym let, jak zakładam , nie jest.
René Nyffenegger
Odpowiedzi:
144
:setsłuży do ustawiania opcji , :letdo przypisywania wartości do zmiennej .
Zdarza się, że wartość opcji jest powiązana z nazwą opcji poprzedzoną a &( &option-namekonstrukcja zachowuje się wtedy bardzo podobnie do „zwykłych” zmiennych). Tak więc następujące są równoważne:
:set tw=40
:let &tw=40
Ale na przykład przypisanie 50 do zmiennej globalnej foo ( :let g:foo=50) nie może zostać osiągnięte za pomocą :setpolecenia (ponieważ g: foo jest zmienną, a nie opcją).
Niektóre opcje są typu boolowskiego. Przy ich ustawianiu nie jest wymagana żadna wartość (jak :set noici odwrotnie :set ic).
re :set nowrap:, options.txt (: help set-option) mówi:: se [t] {opcja} Przełącz opcję: ustaw, włącz. Opcja liczbowa: pokaż wartość. Opcja ciągu: pokaż wartość. Nie zgadza się to z tym, co masz tutaj, kiedy mówisz „ustawi domyślną wartość zawijania opcji”. ??
Widok eliptyczny
@Ellipticalview Jestem trochę zdezorientowany. Cytujesz fragmenty dokumentacji. Jeśli przeczytasz całość, przekonasz się, że zgadza się ze wszystkimi moimi przypadkami. [Uwaga: noopcje -prefixed mogą być mylące. Należy również pamiętać, option&kończy się przecinkiem &, że może być pominięte].
sehe
12
:setdziała tylko z opcjami, a odpowiedź przedstawia kilka dobrych przykładów użycia.
:letz drugiej strony może zrobić prawie wszystko, co :setmoże, a także więcej. Może przypisać wartość
zmienna, np let vi = 'vim'
opcja np let &tw = 40
rejestr, np let @a = $HOME . '/vimfiles'
zmienna środowiskowa, np let $NOTHING = 'NOTHING'
Inną ważną różnicą jest to, że prawa strona :letjest wyrażeniem , co oznacza, że możesz robić takie rzeczy, jak konkatenacja ciągów (jak widać w moim przykładzie rejestru powyżej) i operacje arytmetyczne (np let &tw = 40 + 60.). Oznacza to również, że musisz zacytować wartość, jeśli jest to ciąg. :setz drugiej strony czyta wartość dosłownie.
Jest łatwiejszy w użyciu :setz opcjami, mimo że :letmoże to również zrobić w większości. Oto kilka porównań z użyciem przykładów („nie dotyczy” oznacza, że nie da się tego zrobić :let)
:verbose set vs nie dotyczy (nie myśl, że istnieje inny sposób na wyświetlenie wszystkich opcji)
:set tw=40vs :let &tw = 40(tak, możesz też użyć tego samego skrótu let)
:set wrap& vs n / a
:set nowrapvs :let &wrap = 0(dla opcji logicznych, 0 to fałsz, a 1 to prawda)
:set wrap! vs :let &wrap = !&wrap
Jeszcze kilka przykładów
wypisuje wartość opcji: :set formatoptions?vs :echo &formatoptions( letnie wypisuje wartości, w przeciwieństwie do set)
przypisywanie do wielu opcji w tym samym czasie:
:set et sw=4 sts=4
vs
:let [&et, &sw, &sts] = [0, 4, 4]
ustaw opcję globalną: setglobal etvslet &g:et = 1
ustaw opcję lokalną: setlocal etvslet &l:et = 1
Zobacz :h :seti :h :letpo więcej szczegółów
tl; dr
:setdziała tylko z opcjami, ale składnia jest znacznie prostsza. :letdziała nie tylko z opcjami, ale także ze zmiennymi, rejestrami i zmiennymi środowiskowymi. W przeciwieństwie do tego :set, po prawej stronie :letjest wyrażenie.
Rozwijając to, o czym pisali ludzie :let, zauważyłem, że można go użyć do przypisania wartości zmiennej do opcji, czego :setnie można zrobić. Na przykład ta funkcja używa letdo przypisania wartości zmiennej globalnej orig_twdo textwidthopcji:
" 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>
Podsumowanie:let umożliwia przypisanie zmiennej do opcji let &textwidth = g:orig_twi odwrotnie.
Serge Stroobandt
2
To jest bardzo proste.
Jak powiedzieli ludzie, setdotyczy opcji i działa lepiej z powodu ograniczeń. setJest również poleceniem historycznym, które wszystkie wersje viużywają do ustawiania swoich opcji. Większość (wszystkich?) Innych wersji vinie ma let.
Ale prawdopodobnie najważniejsze jest to, że setdziała na wszystkich wersjach vim, letpolecenie można pominąć podczas kompilacji vim. Standard tinyi smallkompilacje to robią.
Jeśli go brakuje let, wyświetla błąd: E319: Sorry, the command is not available in this version
Uwaga: ifi endifnie są również zaimplementowane w, vim.tinyale w tym przypadku polecenia nie powodują błędu, zamiast tego wszystko między dwoma poleceniami jest pomijane, WŁĄCZAJĄC else.
:help set
i:help let
i czytać podręcznik?let
nie robi tego samego. Są rzeczy, których nie możesz osiągnąć, aset
które są możliwelet
, zobacz moją odpowiedź.setlocal
jeszcze nie wspomniał ... są one równoważne&l:*
zmiennym.set noic
lubset ic
. O ile wiem,set
jest również kompatybilny zvi
którymlet
, jak zakładam , nie jest.Odpowiedzi:
:set
służy do ustawiania opcji ,:let
do przypisywania wartości do zmiennej .Zdarza się, że wartość opcji jest powiązana z nazwą opcji poprzedzoną a
&
(&option-name
konstrukcja zachowuje się wtedy bardzo podobnie do „zwykłych” zmiennych). Tak więc następujące są równoważne:Ale na przykład przypisanie 50 do zmiennej globalnej foo (
:let g:foo=50
) nie może zostać osiągnięte za pomocą:set
polecenia (ponieważ g: foo jest zmienną, a nie opcją).Niektóre opcje są typu boolowskiego. Przy ich ustawianiu nie jest wymagana żadna wartość (jak
:set noic
i odwrotnie:set ic
).źródło
Zestaw jest bardziej przyjaznym dla użytkownika interfejsem, specjalizującym się w opcjach
Na przykład
aby wyświetlić wszystkie obowiązujące opcje.
Będzie działać jako skrót dla
set textwidth=40
Ustawi domyślną wartość opcji
wrap
Wyłącza opcję
Będzie włączyć opcję
Najważniejsze,
Niewiele z powyższych można (łatwo) osiągnąć za pomocą
let
.źródło
:set nowrap
:, options.txt (: help set-option) mówi:: se [t] {opcja} Przełącz opcję: ustaw, włącz. Opcja liczbowa: pokaż wartość. Opcja ciągu: pokaż wartość. Nie zgadza się to z tym, co masz tutaj, kiedy mówisz „ustawi domyślną wartość zawijania opcji”. ??no
opcje -prefixed mogą być mylące. Należy również pamiętać,option&
kończy się przecinkiem&
, że może być pominięte].:set
działa tylko z opcjami, a odpowiedź przedstawia kilka dobrych przykładów użycia.:let
z drugiej strony może zrobić prawie wszystko, co:set
może, a także więcej. Może przypisać wartośćlet vi = 'vim'
let &tw = 40
let @a = $HOME . '/vimfiles'
let $NOTHING = 'NOTHING'
Inną ważną różnicą jest to, że prawa strona
:let
jest wyrażeniem , co oznacza, że możesz robić takie rzeczy, jak konkatenacja ciągów (jak widać w moim przykładzie rejestru powyżej) i operacje arytmetyczne (nplet &tw = 40 + 60
.). Oznacza to również, że musisz zacytować wartość, jeśli jest to ciąg.:set
z drugiej strony czyta wartość dosłownie.Jest łatwiejszy w użyciu
:set
z opcjami, mimo że:let
może to również zrobić w większości. Oto kilka porównań z użyciem przykładów („nie dotyczy” oznacza, że nie da się tego zrobić:let
):verbose set
vs nie dotyczy (nie myśl, że istnieje inny sposób na wyświetlenie wszystkich opcji):set tw=40
vs:let &tw = 40
(tak, możesz też użyć tego samego skrótulet
):set wrap&
vs n / a:set nowrap
vs:let &wrap = 0
(dla opcji logicznych, 0 to fałsz, a 1 to prawda):set wrap!
vs:let &wrap = !&wrap
Jeszcze kilka przykładów
:set formatoptions?
vs:echo &formatoptions
(let
nie wypisuje wartości, w przeciwieństwie doset
)przypisywanie do wielu opcji w tym samym czasie:
vs
ustaw opcję globalną:
setglobal et
vslet &g:et = 1
setlocal et
vslet &l:et = 1
Zobacz
:h :set
i:h :let
po więcej szczegółówtl; dr
:set
działa tylko z opcjami, ale składnia jest znacznie prostsza.:let
działa nie tylko z opcjami, ale także ze zmiennymi, rejestrami i zmiennymi środowiskowymi. W przeciwieństwie do tego:set
, po prawej stronie:let
jest wyrażenie.źródło
Rozwijając to, o czym pisali ludzie
:let
, zauważyłem, że można go użyć do przypisania wartości zmiennej do opcji, czego:set
nie można zrobić. Na przykład ta funkcja używalet
do przypisania wartości zmiennej globalnejorig_tw
dotextwidth
opcji:źródło
let
umożliwia przypisanie zmiennej do opcjilet &textwidth = g:orig_tw
i odwrotnie.To jest bardzo proste.
Jak powiedzieli ludzie,
set
dotyczy opcji i działa lepiej z powodu ograniczeń.set
Jest również poleceniem historycznym, które wszystkie wersjevi
używają do ustawiania swoich opcji. Większość (wszystkich?) Innych wersjivi
nie malet
.Ale prawdopodobnie najważniejsze jest to, że
set
działa na wszystkich wersjachvim
,let
polecenie można pominąć podczas kompilacjivim
. Standardtiny
ismall
kompilacje to robią.Jeśli go brakuje
let
, wyświetla błąd:E319: Sorry, the command is not available in this version
Uwaga:
if
iendif
nie są również zaimplementowane w,vim.tiny
ale w tym przypadku polecenia nie powodują błędu, zamiast tego wszystko między dwoma poleceniami jest pomijane, WŁĄCZAJĄCelse
.źródło