No Vim, quais são as configurações / comandos que começam com um prefixo (b :, g :)?

26

Eu instalei este plugin com o Vundle e notei que ele tem algumas configurações (o README as chama de variáveis) como:

b:javascript_fold

e

g:javascript_conceal

O README diz que "posso adicioná-los ao seu .vimrcpara ativar / desativar os recursos deles". Mas não tenho certeza de como configurá-los :. Essas variáveis ​​não estão disponíveis por meio de setou echo, nem são comandos ou funções. Como posso definir / inspecionar isso?

Dmitry Minkovsky
fonte

Respostas:

48

Essas são variáveis ​​internas.

Você os cria e modifica com o :letcomando:

:let g:var_name = 1

Você os destrói com :unlet.

Você os inspeciona com :echo.

O prefixo mostra o escopo da variável; de :help internal-variables:

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.

Adicionar esse tipo de variável à sua ~/.vimrcé assim:

let g:var_name = 1

Normalmente, apenas variáveis ​​globais devem ser adicionadas ao seu ~/.vimrc, variáveis ​​locais de buffer devem ser usadas em plugins de tipo de arquivo.

romainl
fonte
2
Para completude: sem prefixo: Em uma função: local para uma função; caso contrário: global
Tom Hale
11

Variáveis ​​de configuração não são opções, elas apenas "emulam" as dos plugins. Portanto, você não usa :set, mas :let(e :echopara listar o valor atual).

O sigilo na frente da variável determina seu escopo. g:significa global; esses geralmente precisam ser definidos antes do carregamento do plug-in, ou seja, colocando

let g:javascript_conceal = 1

no seu ~/.vimrc(e reinicie o Vim).

Como algumas configurações se aplicam apenas a certos tipos de arquivos , eles usam o b:prefixo. Configurá-los ~/.vimrcapenas os aplicaria ao primeiro buffer aberto, que não é o que você deseja. Em vez disso, você precisa se conectar ao mecanismo de detecção de tipo de arquivo .

Se você deseja habilitar apenas uma opção de configuração para certos tipos de arquivos, use :let b:var = valuee insira os comandos correspondentes em ~/.vim/after/ftplugin/{filetype}.vim, onde {filetype}está o tipo de arquivo real (por exemplo javascript). (Isso requer que você tenha :filetype plugin on; o uso do diretório after permite substituir qualquer configuração de tipo de arquivo padrão feita por $VIMRUNTIME/ftplugin/{filetype}.vim.)

Como alternativa, você pode definir um :autocmd FileType {filetype} setlocal option=valuediretamente no seu ~/.vimrc, mas isso tende a se tornar pesado depois de muitas personalizações.

autocmd Filetype javascript let b:javascript_fold = 1
Ingo Karkat
fonte