:set
wird für interne Optionen verwendet und behandelt die Arten der Option. Es erlaubt Dinge wie die Umkehrung von booleschen Optionen (zB :set invpaste
), Einstellungen zu einer Liste hinzuzufügen oder daraus zu entfernen (zB :set dictionary-=/tmp/myfile
).
:let
Ermöglicht andererseits den Zugriff auf eine Vielzahl von veränderbaren Dingen in vim, einschließlich regulärer Variablen, Optionen, Register usw., und der festgelegte Wert ist das Ergebnis der Auswertung eines Ausdrucks anstelle eines einfachen Werts wie mit :set
, was bedeutet :let
Ermöglicht den Zugriff auf Mathematik, Zeichenfolgenmanipulation und Funktionen.
Beispielsweise können Sie :let &dictionary=/tmp/myfile
die Option 'dictionary'
auf setzen /tmp/myfile
(und damit die oben im :set
Beispiel gezeigte Option ändern ).
Mit können Sie eine globale Variable setzen :let g:myvar=42
. Das Präfix, nach dem Sie gefragt haben, gibt den Umfang an. Die Antwort von Doorknob deckt das Scoping sehr gut ab.
Sie können :let @a="Some text"
den Inhalt des Registers a ändern, um ihn zu enthalten Some text
, mit dem Sie ihn beispielsweise später einfügen können "ap
.
Sie können ein :let $PATH = $PATH . ":/home/me/bin"
eigenes bin-Verzeichnis an die PATH
Umgebungsvariable anhängen , das an alle von Vim ausgeführten externen Befehle übergeben wird (dies funktioniert für jede Umgebungsvariable).
Obwohl let
es einige ziemlich mächtige Fähigkeiten hat (wie :let $MYFILE = @%
das Setzen einer Umgebungsvariablen auf den Dateinamen des aktuellen Puffers), weiß es nicht, dass eine Einstellung ein Boolescher Wert ist, so dass es keine netten Zugriffe oder Fehlerprüfungen :set
bietet , wie dies der Fall ist.
Am Ende geht es darum, das beste Werkzeug für den Job zu verwenden. Wenn Sie einfach eine Option ändern möchten, :set
ist dies Ihr Werkzeug. Wenn Sie Informationen zwischen Registern, Optionen, Variablen verschieben oder Ihren Wert auf dem Ergebnis eines Ausdrucks aufbauen möchten, :let
ist dies Ihr Werkzeug.
Obwohl Sie explizit nach Vim gefragt haben, ist eine andere Sache zu beachten, die :set
in den vi / Vim-Familien, in denen :let
es weniger häufig vorkommt, häufiger vorkommt (z. B. hat let
nvi keinen Befehl und viemu bietet keinen Zugriff auf Register über let
). .
let
von vim mitlet &{option name}=value