:setwird 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).
:letErmö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 :letErmöglicht den Zugriff auf Mathematik, Zeichenfolgenmanipulation und Funktionen.
Beispielsweise können Sie :let &dictionary=/tmp/myfiledie Option 'dictionary'auf setzen /tmp/myfile(und damit die oben im :setBeispiel 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 PATHUmgebungsvariable anhängen , das an alle von Vim ausgeführten externen Befehle übergeben wird (dies funktioniert für jede Umgebungsvariable).
Obwohl letes 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 :setbietet , 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, :setist dies Ihr Werkzeug. Wenn Sie Informationen zwischen Registern, Optionen, Variablen verschieben oder Ihren Wert auf dem Ergebnis eines Ausdrucks aufbauen möchten, :letist dies Ihr Werkzeug.
Obwohl Sie explizit nach Vim gefragt haben, ist eine andere Sache zu beachten, die :setin den vi / Vim-Familien, in denen :letes weniger häufig vorkommt, häufiger vorkommt (z. B. hat letnvi keinen Befehl und viemu bietet keinen Zugriff auf Register über let). .
letvon vim mitlet &{option name}=value