Odpowiedzi:
let
przypisuje wartość do zmiennej i set
przypisuje 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.
: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 do PATH
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 ma let
polecenia, a viemu nie zapewnia dostępu do rejestrów przez let
) .
let
pomocąlet &{option name}=value