winheight()
e winwidth()
retorne o número de colunas / linhas na janela atual. O que estou procurando é algo mais próximo da altura e largura reais da área de edição ou da área exibida, se executada em um terminal. O problema com winheight()
e winwidth()
é que a proporção calculada a partir desses valores está fora de sintonia com a proporção real.
:echo winwidth('%') winheight('%') winwidth('%') * 1.0 / winheight('%')
104 51 2.039216
Uma captura de tela da área do buffer tem o tamanho de 936x918 pixels, fornecendo uma proporção de 1.019608
. Acho que posso obter o valor real usando o tamanho da fonte, mas como?
Este é um acompanhamento de Como posso fazer com que o Vim abra a ajuda em uma divisão vertical? . Estou tentando adaptar a solução do Nobe4 .
cnoreabbrev h <C-r>=(&columns >= 160 && getcmdtype() ==# ':' && getcmdpos() == 1 ? 'vertical botright help' : 'h')<CR>
.==#
operador que:h
ajudou a esclarecer, eu realmente entendi todo o maldito comando. Isso faz de mim um especialista em Vim? Tem que ser algo assim. Precisa sair mais.Respostas:
Seu cálculo é inclinado porque a proporção de cada célula é vertical.
Por exemplo, no Terminal.app, com fonte de 23 pontos e espaçamento de caracteres padrão, cada célula do terminal tem uma largura de 7 px e uma altura de 15 px para um total de 728 x 765 px :
Você não pode recuperar o tamanho da fonte no Vim sem chamar comandos externos ou uma maneira de se comunicar com o terminal, que pode se tornar bastante pesado. Obviamente, isso é diferente no Gvim graças a
'guifont'
.Se você conseguir fazer isso, ainda precisará deduzir o tamanho de uma célula, que pode variar dependendo do programa do terminal, se não houver um padrão . Eu verifiquei apenas o iTerm 2, que felizmente tem o mesmo resultado.
Portanto, eu optaria por uma solução estática. Enxaguei a verificação de largura mínima nesse trecho em que você pode colocar
plugin/help.vim
:Se a janela for grande o suficiente para manter 80 colunas do buffer atual, uma divisão estreita de ajuda será aberta à direita, caso contrário, a divisão será aberta abaixo. Você pode personalizar a direção da divisão com
:vertical
.fonte