Não conheço muito a teoria por trás do Vim. Parece que temos set
algumas variáveis e let
outras variáveis. Qual é a diferença e quando é necessário um sobre o outro?
Além disso, o esquema de cores do vim solarizado diz para let g:blabla...
qual é o significado g:
nesse caso?
let
fazendolet &{option name}=value
:set
é usado para opções internas e lida com os tipos da opção. Permite coisas como a inversão de opções booleanas (por exemplo,:set invpaste
adicionar e remover configurações de uma lista (por exemplo:set dictionary-=/tmp/myfile
)).:let
, Por outro lado, permite o acesso a uma infinidade de coisas mutáveis no vim, incluindo variáveis regulares, opções, registos, etc. e o valor a ser definido é o resultado da avaliação de uma expressão, em vez de um valor simples, como com:set
, o que significa:let
dá acesso a matemática, manipulação de strings e funções.Por exemplo, você pode
:let &dictionary=/tmp/myfile
definir a opção'dictionary'
para/tmp/myfile
(modificando a mesma opção mostrada acima no:set
exemplo)Você pode definir uma variável global com
:let g:myvar=42
. O prefixo que você perguntou fornece escopo. A resposta da maçaneta da porta cobre muito bem o escopo.Você pode
:let @a="Some text"
alterar o conteúdo do registro a para conterSome text
, que poderá ser colado posteriormente,"ap
por exemplo.Você pode
:let $PATH = $PATH . ":/home/me/bin"
anexar seu próprio diretório bin àPATH
variável de ambiente, que é passada para qualquer comando externo executado pelo Vim (isso funciona para qualquer variável de ambiente).Embora
let
tenha algumas habilidades bastante poderosas (como:let $MYFILE = @%
definir uma variável de ambiente como o nome do arquivo do buffer atual), ele não sabe que uma configuração é booleana, por isso não oferece bons acessos ou verificação de erros como o:set
faz.No final, trata-se de usar a melhor ferramenta para o trabalho. Se você deseja simplesmente modificar uma opção,
:set
é sua ferramenta. Se você deseja mover informações entre registradores, opções, variáveis ou basear seu valor no resultado de uma expressão, então:let
é sua ferramenta.Embora você tenha perguntado explicitamente sobre o Vim, outra coisa a ser observada é que
:set
é mais comum nas famílias vi / Vim, onde:let
é menos comum (por exemplo, o nvi não possui umlet
comando e o viemu não fornece acesso aos registros vialet
) .fonte