:setsolo funciona con opciones, y la respuesta de sehe muestra algunos buenos ejemplos de uso.
:letPor otro lado, puede hacer casi todo lo que :setpuede hacer, y más. Puede asignar un valor a
- una variable, por ejemplo
let vi = 'vim'
- una opción, por ejemplo
let &tw = 40
- un registro, por ejemplo
let @a = $HOME . '/vimfiles'
- una variable de entorno, p. ej.
let $NOTHING = 'NOTHING'
Otra diferencia importante es que el lado derecho de :letes una expresión , lo que significa que puede hacer cosas como la concatenación de cadenas (como se ve en mi ejemplo de registro anterior) y operaciones aritméticas (por ejemplo let &tw = 40 + 60). Esto también significa que debe citar el valor si es una cadena. :setpor otro lado lee el valor literalmente.
Es más fácil de usar :setcon las opciones, aunque :lettambién puede hacer la mayor parte, aquí hay algunas comparaciones usando los ejemplos de sehe ("n / a" significa que no hay forma de hacerlo :let)
:verbose set vs n / a (no creo que haya otra forma de enumerar todas las opciones)
:set tw=40vs :let &tw = 40(sí, puedes usar la misma taquigrafía lettambién)
:set wrap& vs n / a
:set nowrapvs :let &wrap = 0(para opciones booleanas, 0 es falso y 1 es verdadero)
:set wrap! vs :let &wrap = !&wrap
Algunos ejemplos más
- imprime el valor de una opción:
:set formatoptions?vs :echo &formatoptions( letno imprime valores, a diferencia set)
asignando a múltiples opciones al mismo tiempo:
:set et sw=4 sts=4
vs
:let [&et, &sw, &sts] = [0, 4, 4]
establecer opción global: setglobal etvslet &g:et = 1
- establecer la opción local:
setlocal etvslet &l:et = 1
Ver :h :sety :h :letpara más detalles
tl; dr
:setsolo funciona con opciones, pero la sintaxis es mucho más simple. :letfunciona no solo con opciones, sino también con variables, registros y variables de entorno. A diferencia :set, el lado derecho de :letes una expresión.
:help sety:help lety leer el manual?