No sé mucho de la teoría detrás de Vim. Parece que tenemos set
algunas variables y let
otras variables. ¿Cuál es la diferencia, y cuándo se requiere uno sobre el otro?
Además, el esquema de colores vim solarizado dice let g:blabla...
¿cuál es el significado de g:
en este caso?
let
haciendolet &{option name}=value
: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 contenerSome text
, que luego podría pegar con,"ap
por ejemplo.Puede
:let $PATH = $PATH . ":/home/me/bin"
agregar su propio directorio bin a laPATH
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 unlet
comando y viemu no proporciona acceso a los registros a través delet
) .fuente