Respostas:
let
atribui um valor a uma variável e set
atribui um valor a uma das opções internas do Vim.
Por exemplo, você usaria
:let mystring='Hello!'
para declarar uma nova variável, mas você usaria
:set tabstop=4
ou
:set expandtab
para definir uma das opções do Vim.
Veja também: :help let
, :help set
.
g:
simplesmente significa uma variável global. Existem vários desses "namespaces variáveis" - de :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
é 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 conter Some 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 um let
comando e o viemu não fornece acesso aos registros via let
) .
let
fazendolet &{option name}=value