Respuestas:
let
asigna un valor a una variable y set
asigna un valor a una de las opciones internas de Vim.
Por ejemplo, usarías
:let mystring='Hello!'
para declarar una nueva variable, pero usarías
:set tabstop=4
o
:set expandtab
para configurar una de las opciones de Vim.
Ver también: :help let
, :help set
.
g:
simplemente significa una variable global. Existen varios de estos "espacios de nombres variables", desde :help internal-variables
:
(nothing) In a function: local to a function; otherwise: global
|buffer-variable| b: Local to the current buffer.
|window-variable| w: Local to the current window.
|tabpage-variable| t: Local to the current tab page.
|global-variable| g: Global.
|local-variable| l: Local to a function.
|script-variable| s: Local to a |:source|'ed Vim script.
|function-argument| a: Function argument (only inside a function).
|vim-variable| v: Global, predefined by Vim.
: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