Jedi Tux

Simular margem no vim para ler o :help

Posted in Bash, Dicas, Linux, Vim by Fernando Basso on 1 de janeiro de 2012

Simular margem no vim para ler o :help

Uma coisa que me incomoda quando estou lendo o :help no vim é que o texto fica “grudado” na borda esquerda da janela do vim (ou gvim). Então, o que costumo fazer é habilitar os números de linha com :set number. para ter algo no lado esquerdo da janela funcionando como uma espécie de margem.

Tem dois detalhes que me incomodam. Um é que não adiante colocar set number no vimrc porque help é um filetype no vim, então, as configurações do filetype help (que usa set nonumber) sobrescreve o set number do vimrc. Outra coisa é que ter números de linhas para ler o help pode não agradar muito ou fazer muito sentido. Fortunadamente, há uma maneira de simular uma margem, sem que fique aparecendo os números.

Entendendo o processo

Quando usamos a opção set number, o vim usa um espaço ao lado esquerdo da janela para mostrar esses números, e também nos fornece os grupos de cor chamados LineNr que é justamente para definir a cor que aparece naquela parte onde os números são mostrados, tanto o background como o foreground.

Pois bem, se configurarmos LineNr para ter a mesma cor de background que do resto do vim não veremos diferença de cor entre o fundo do texto normal e a cor da região usada para mostrar o números das linhas. Ainda mais, se configurarmos a cor que LineNr usa para mostrar os números propriamente ditos para a mesma cor do background, não vamos ser capazes de ler/ver número algum, pois a cor do texto será exatamente igual a cor de fundo. Os números ainda estão lá, mas não dá pra notar.

O que vamos fazer então é criar (se já não existir) o diretório ~/.vim/after/ftplugin. O comando abaixo se encarrega disso, e se os diretórios já existem, ele simplesmente não faz nada:

mkdir --parents ~/.vim/after/ftplugin

Precisamos criar também, (se já não existir) o arquivo help.vim dentro de ~/.vim/after/ftplugin/:

vim ~/.vim/after/ftplugin/help.vim

Agora, vamos descobrir quais as cores que o nosso colorscheme está usando para o background. Os grupos de cores para isso são ctermbg (background no terminal) e guibg (background no gvim). Para descobrir as cores configuradas para os grupos mencionados, execute os seguinte comando:

:highlight Normal

Isso vai mostrar as cores configuradas para ctermfg, ctermbg, guifg, entre outras coisas.

Para ter certeza da cor que o gvim usa como background (há fatores que podem fazer com que o vim no terminal use cor x, e o gvim use cor y para determinado grupo) é mais seguiro abrir o gvim e rodar o mesmo comando para ver o que ele mostra sobre si próprio para guifg e guibg.

NOTE que o comando é digitado no modo de comando do vim. Entramos no modo de comando quando, estando no modo normal pressionamos : (chegamos no modo normal pressionando <Esc> ou CTRL-[).

Finalmente, no ~/.vim/after/ftplugin/help.vim colocamos o configuramos os backgrounds e foregournds para o vim e gvim com os valores das cores conforme foram mostrados com o comando anterior.

set number
highlight LineNr ctermfg=235 ctermbg=235 guifg=#dfd6c1 guibg=#242424

Veja, a cor do ctermfg, ctermbg, guifg e guibg são iguais (fg = FackGround, bg = BackGround). E lembre-se que essa cor é igual a cor do background da janela normal do vim. Isso cria a impressão que há uma margem.

De agora em diante, toda vez que você abrir um :help no vim, terma uma “margem” no lado esquerdo da janela. Pra mim pelo menos, parece tornar a leitura mais confortável.

Colocando em uma função (opcional)

Podemos também deixar a configuração padrão do vim ficar como é quando abrimos um :help, e colocar o código que criamos em uma função, e criar uma outra função que desabilita a margem.

A função que habilita:

function! CriaMargem()
 set number
 highlight LineNr ctermfg=235 ctermbg=235 guifg=gray16 guibg=gray16
endfunction

Para criar a função que desabilita a margem, vamos descobrir a as cores que são definidas para LineNr por padrão. Certifique-se de que não tenha chamado a função acima e não tenha aberto um :help usando o nosso truque, senão o comando abaixo não vai mostrar as cores originais. Em todo caso, rode o comando (novamente, no modo de comando):

:hightlight Normal

E coloque as cores que aparecerem aí na função que desabilita a margem (volta as cores padrão para que possamos ver os números):

function! MargemOff()
 highlight LineNr ctermfg=180 ctermbg=242 guifg=#cdaa7d guibg=bg
endfunction

Essas funções também vão dentro do help.vim que criamos. Chame as funções assim no vim:

:call CriaMargem()

e

:call MargemOff()

Pode usar <Tab> para autocompletar.

Note que colocando essas funções no ~/.vim/after/ftplugin/help.vim, elas só estarão disponíveis quando você estiver lendo um :help no vim. Portanto, não adianta esta editando um html, C, ou perl e querer chamar essas funções. Se quiser que elas fiquem disponíveis para outros filetypes, coloque-as no ~/.vimrc.

Supondo que deixamos elas no help.vim, vamos deixar CriaMargem() habilitada por padrão. Para tal, basta chamar a função de dentro do próprio help.vim. Aqui vai o exemplo completo:

" Habilita a simulação de margem.
function! CriaMargem()
 set number
 highlight LineNr ctermfg=235 ctermbg=235 guifg=gray16 guibg=gray16
endfunction
" Mostra set mumber normalmente.
function! MargemOff()
 highlight LineNr ctermfg=180 ctermbg=242 guifg=#cdaa7d guibg=bg
endfunction

” Vamos deixar a função habilitada por padrão.

autocmd BufEnter * call CriaMargem()

Com certeza deve ter como colocar tudo em uma única função, tornando o código mais profissional, mas no momento em que escrevo, é o que deu pra fazer sem perder muito tempo.

Tagged with: , , , ,

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: