Odpowiedzi:
letprzypisuje wartość do zmiennej i setprzypisuje wartość do jednej z wewnętrznych opcji Vima.
Na przykład byś użył
:let mystring='Hello!'
aby zadeklarować nową zmienną, ale użyłbyś jej
:set tabstop=4
lub
:set expandtab
ustawić jedną z opcji Vima.
Zobacz także: :help let, :help set.
g:oznacza po prostu zmienną globalną. Istnieje kilka takich „zmiennych nazw” - z :help internal-variables:
(nothing) In a function: local to a function; otherwise: global
|buffer-variable| b: Local to the current buffer.
|window-variable| w: Local to the current window.
|tabpage-variable| t: Local to the current tab page.
|global-variable| g: Global.
|local-variable| l: Local to a function.
|script-variable| s: Local to a |:source|'ed Vim script.
|function-argument| a: Function argument (only inside a function).
|vim-variable| v: Global, predefined by Vim.
:setsł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 :letdaje dostęp do matematyki, manipulacji ciągami i funkcji.
Na przykład możesz :let &dictionary=/tmp/myfileustawić opcję 'dictionary'na /tmp/myfile(modyfikując w ten sposób tę samą opcję pokazaną powyżej w :setprzykł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ć "apna przykład.
Możesz :let $PATH = $PATH . ":/home/me/bin"dołączyć własny katalog bin do PATHzmiennej środowiskowej, która jest przekazywana do wszelkich zewnętrznych poleceń wykonywanych przez Vima (działa to dla każdej zmiennej środowiskowej).
Chociaż letma 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 :setrobi.
Ostatecznie chodzi o użycie najlepszego narzędzia do pracy. Jeśli chcesz po prostu zmodyfikować opcję, :setto twoje narzędzie. Jeśli chcesz przenosić informacje między rejestrami, opcjami, zmiennymi lub oprzeć swoją wartość na wyniku wyrażenia, :letto Twoje narzędzie.
Chociaż wyraźnie spytałeś o Vima, należy zwrócić uwagę na to, że :setjest bardziej powszechny w rodzinach vi / Vim, gdzie :letjest mniej powszechny (na przykład nvi nie ma letpolecenia, a viemu nie zapewnia dostępu do rejestrów przez let) .
letpomocąlet &{option name}=value