:setest utilisé pour les options internes et gère les types d'options. Il permet des choses comme l'inversion des options booléennes (par exemple :set invpaste) en ajoutant et en supprimant des paramètres d'une liste (par exemple :set dictionary-=/tmp/myfile).
:let, d'autre part, permet d'accéder à une pléthore de choses modifiables dans vim, y compris les variables régulières, les options, les registres, etc. et la valeur définie est le résultat de l'évaluation d'une expression, au lieu d'une simple valeur comme avec :set, ce qui signifie :letvous donne accès aux mathématiques, à la manipulation de chaînes et aux fonctions.
Par exemple, vous pouvez :let &dictionary=/tmp/myfiledéfinir l'option 'dictionary'sur /tmp/myfile(modifiant ainsi la même option indiquée ci-dessus dans l' :setexemple)
Vous pouvez définir une variable globale avec :let g:myvar=42. Le préfixe sur lequel vous vous êtes renseigné fournit une portée. La réponse de la poignée de porte couvre très bien la portée.
Vous pouvez :let @a="Some text"changer le contenu du registre a à contenir Some text, que vous pourrez ensuite coller avec "appar exemple.
Vous pouvez :let $PATH = $PATH . ":/home/me/bin"ajouter votre propre répertoire bin à la PATHvariable d'environnement, qui est passée à toutes les commandes externes exécutées par Vim (cela fonctionne pour n'importe quelle variable d'environnement).
Bien qu'il letpossède des capacités assez puissantes (comme :let $MYFILE = @%définir une variable d'environnement sur le nom de fichier du tampon actuel), il ne sait pas qu'un paramètre est un booléen, donc il n'offre pas de bons accès ou de vérification d'erreur comme le :setfait le fait.
En fin de compte, il s'agit d'utiliser le meilleur outil pour le travail. Si vous souhaitez simplement modifier une option, :setc'est votre outil. Si vous souhaitez déplacer des informations entre les registres, les options, les variables ou baser votre valeur sur le résultat d'une expression, :letc'est votre outil.
Bien que vous ayez explicitement posé des questions sur Vim, une autre chose à noter est que :setc'est plus courant dans les familles vi / Vim, où :letc'est moins courant (par exemple, nvi n'a pas de letcommande, et viemu ne donne pas accès aux registres via let) .
leten faisantlet &{option name}=value