Nie znam zbyt wiele teorii stojącej za Vimem. Wygląda na to, że mamy set
jakieś zmienne i let
inne zmienne. Jaka jest różnica i kiedy jedno jest wymagane w stosunku do drugiego?
Ponadto, solaryzowany kolor kolorów vim mówi, let g:blabla...
jakie jest znaczenie g:
w tym przypadku?
let
pomocąlet &{option name}=value
:set
służy do opcji wewnętrznych i obsługuje typy opcji. Pozwala np. Na odwracanie opcji boolowskich (np.:set invpaste
) Dodawanie i usuwanie ustawień z listy (np:set dictionary-=/tmp/myfile
.).:let
, z drugiej strony, pozwala na dostęp do wielu zmiennych rzeczy w vimie, w tym zmiennych regularnych, opcji, rejestrów itp., a ustawiana wartość jest wynikiem oceny wyrażenia, a nie prostej wartości jak z:set
, co oznacza:let
daje dostęp do matematyki, manipulacji ciągami i funkcji.Na przykład możesz
:let &dictionary=/tmp/myfile
ustawić opcję'dictionary'
na/tmp/myfile
(modyfikując w ten sposób tę samą opcję pokazaną powyżej w:set
przykładzie)Możesz ustawić zmienną globalną za pomocą
:let g:myvar=42
. Prefiks, o który pytałeś, określa zakres. Odpowiedź Doorknob bardzo dobrze obejmuje zakres.Możesz
:let @a="Some text"
zmienić zawartość rejestru a, aby zawierałSome text
, który możesz później wkleić"ap
na przykład.Możesz
:let $PATH = $PATH . ":/home/me/bin"
dołączyć własny katalog bin doPATH
zmiennej środowiskowej, która jest przekazywana do wszelkich zewnętrznych poleceń wykonywanych przez Vima (działa to dla każdej zmiennej środowiskowej).Chociaż
let
ma pewne dość potężne możliwości (np.:let $MYFILE = @%
Ustawianie zmiennej środowiskowej do nazwy pliku bieżącego bufora), nie wie, że ustawienie to ma wartość logiczną, więc nie zapewnia miłego dostępu ani sprawdzania błędów, jak to:set
robi.Ostatecznie chodzi o użycie najlepszego narzędzia do pracy. Jeśli chcesz po prostu zmodyfikować opcję,
:set
to twoje narzędzie. Jeśli chcesz przenosić informacje między rejestrami, opcjami, zmiennymi lub oprzeć swoją wartość na wyniku wyrażenia,:let
to Twoje narzędzie.Chociaż wyraźnie spytałeś o Vima, należy zwrócić uwagę na to, że
:set
jest bardziej powszechny w rodzinach vi / Vim, gdzie:let
jest mniej powszechny (na przykład nvi nie malet
polecenia, a viemu nie zapewnia dostępu do rejestrów przezlet
) .źródło