Qual é o formato da linha de status padrão?

8

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 a ele. 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?

  1. Gostaria de adicionar informações após o nome do arquivo
  2. 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?

    
por mtk 22.08.2015 / 11:17

2 respostas

10

Como @muru disse, parece não ser possível exatamente simular a linha de status padrão quando statusline é definido como o código para renderização que faz coisas que não podem ser especificadas em a configuração statusline . É possível chegar bem perto, no entanto. Aqui está uma aproximação razoável da aparência da linha de status padrão quando ruler está habilitado:

:set statusline=%f\ %h%w%m%r\ %=%(%l,%c%V\ %=\ %P%)

A principal diferença é o posicionamento dos números de linha e coluna. Talvez seja possível simular a lógica de espaçamento padrão, mas não consegui descobrir uma maneira de fazer isso. Talvez isso esteja perto o suficiente para seus propósitos.

Eu uso uma versão dividida disso no meu próprio .vimrc para colocar as informações da linha de status Syntastic no meio do que parece ser uma linha de status vim normal com régua:

" start of default statusline
set statusline=%f\ %h%w%m%r\ 

" Syntastic statusline
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

" end of default statusline (with ruler)
set statusline+=%=%(%l,%c%V\ %=\ %P%)

(Caso não seja óbvio, há um espaço à direita na linha " set statusline=... "

    
por 17.11.2015 / 19:48
6

O código não define nenhum valor para uma string de status vazia, mas simplesmente atua usando alguns padrões. Veja src/screen.c , função win_redr_status() . Os itens mostrados são baseados nos recursos compilados, portanto, para reconstruir a linha de status exata, seria necessário examinar os recursos compilados. Pode ser mais simples usar a linha de status de exemplo fornecida em :h statusline :

Examples:
Emulate standard status line with 'ruler' set 
  :set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P
    
por 22.08.2015 / 14:43

Tags