:set
se usa para opciones internas y maneja los tipos de la opción. Permite cosas como la inversión de opciones booleanas (p :set invpaste
. Ej. ) Agregar y eliminar configuraciones de una lista (p :set dictionary-=/tmp/myfile
. Ej .).
:let
, por otro lado, permite el acceso a una gran cantidad de cosas cambiables en vim, incluidas variables regulares, opciones, registros, etc. y el valor que se establece es el resultado de evaluar una expresión, en lugar de un valor simple como with :set
, lo que significa :let
le da acceso a matemáticas, manipulación de cadenas y funciones.
Por ejemplo, puede :let &dictionary=/tmp/myfile
establecer la opción 'dictionary'
en /tmp/myfile
(modificando así la misma opción que se muestra arriba en el :set
ejemplo)
Puede establecer una variable global con :let g:myvar=42
. El prefijo que solicitó proporciona alcance. La respuesta de Doorknob cubre muy bien el alcance.
Puede :let @a="Some text"
cambiar el contenido del registro a para contener Some text
, que luego podría pegar con, "ap
por ejemplo.
Puede :let $PATH = $PATH . ":/home/me/bin"
agregar su propio directorio bin a la PATH
variable de entorno, que se pasa a cualquier comando externo ejecutado por Vim (esto funciona para cualquier variable de entorno).
Aunque let
tiene algunas capacidades bastante poderosas (como :let $MYFILE = @%
establecer una variable de entorno para el nombre de archivo del búfer actual), no sabe que una configuración es booleana, por lo que no ofrece buenos accesos o verificación de errores como lo :set
hace.
Al final, se trata de usar la mejor herramienta para el trabajo. Si desea simplemente modificar una opción, :set
es su herramienta. Si desea mover información entre registros, opciones, variables o basar su valor en el resultado de una expresión, entonces :let
es su herramienta.
Aunque usted preguntó explícitamente sobre Vim, otra cosa a tener en cuenta es que :set
es más común en las familias vi / Vim, donde :let
es menos común (por ejemplo, nvi no tiene un let
comando y viemu no proporciona acceso a los registros a través de let
) .
let
haciendolet &{option name}=value