Eu li sobre como atualizar a linha de status do vim aqui . E eu posso atualizá-lo com sucesso.
Mas, gostaria de manter o formato da linha de status padrão do vim e apenas adicionar mais algumas informações, como tamanho do arquivo, tipo de arquivo etc.
A linha de status padrão do Vim é:
<file-name> line_num,col_num %file
Como eu poderia fazer o seguinte?
- Gostaria de adicionar informações após o nome do arquivo
- Exibir o formato atual da linha de status (
:set statusline
não exibe nada)
Eu tentei:
set statusline+=%y
Mas isso substitui a linha de status inteira e apenas exibe o tipo de arquivo ( %y
).
Alguma dica?
Respostas:
Como o @muru disse, não parece possível simular exatamente a linha de status padrão quando
statusline
é definida como o código para renderizar o que faz coisas que não podem ser especificadas nastatusline
configuração. É possível chegar bem perto, no entanto. Aqui está uma aproximação razoável da aparência da linha de status padrão quandoruler
está habilitada:A principal diferença é o posicionamento dos números de linha e coluna. Se for possível simular a lógica de espaçamento padrão, não consegui descobrir uma maneira de fazê-lo. Talvez isso seja próximo o suficiente para seus propósitos.
Eu uso uma versão dividida disso
.vimrc
para colocar informações da linha de status do Syntastic no meio do que parece uma linha de status normal do vim com a régua:fonte
O código não define nenhum valor para uma cadeia de status vazia, mas simplesmente age usando alguns padrões. Veja
src/screen.c
, funçãowin_redr_status()
. Os itens mostrados são baseados nos recursos compilados, portanto, para reconstruir a linha de status exata, é necessário examinar os recursos compilados. Pode ser mais simples usar a linha de status de exemplo fornecida em:h statusline
:fonte
%-14.(%l,%c%V%)
?tl; dr
Embora minha solução sugerida não seja muito diferente da das outras respostas, gostaria de compartilhar uma explicação mais detalhada.
comportamento original
Primeiro, vamos descobrir como
vim
desenha a linha de status. As funções responsáveis sãowin_redr_status()
ewin_redr_ruler()
.vim
leva o buffer de nome , adiciona um espaço se houver algum bandeiras a serem seguidas (como[Help]
,[Preview]
,[+]
,[RO]
). Em seguida , adiciona as bandeiras .Normalmente, ele aloca 18 células de caracteres para a régua. Se a parte do nome do buffer não couber, o restante do espaço disponível o
vim
trunca da esquerda e adiciona<
no início.Se houver espaço para o mapa de teclas , ele será adicionado no final (alinhado à direita).
Agora, o governante. Consiste em
<row>,<col>-<virtcol>
parte e posição relativa (alinhada à direita).Há também uma restrição de que a parte com o nome do buffer deve ter pelo menos metade da largura .
solução
Agora vamos pegar o valor sugerido pelos documentos :
Onde
Portanto, primeiro
%<
pode ser omitido, pois, por padrão, o nome do buffer é truncado no início. Em seguida, está faltando o sinalizador de visualização (%w
). Além disso, quando a janela é menor que18 * 2
caracteres, a parte correta ocupa mais da metade da linha de status.Portanto, pelo menos podemos omitir
%<
e adicionar%w
:Podemos ir além e garantir que a parte certa não ocupe mais da metade da linha de status:
Em seguida, podemos fazê-lo depender dos recursos que
vim
foram compilados .Mas eu diria que isso não é prático, e a solução anterior seria suficiente para a maioria das intenções e propósitos. No entanto, se a última solução não funcionar para você, diga-me o que há de errado e tentarei encontrar uma melhor.
O problema com a solução sugerida por Laurence Gonsalves é que, se não houver sinalizadores, haverá dois espaços entre as partes esquerda e direita:
fonte