vim - Qual é a melhor maneira de definir a cor da linha de status para mudar, com base no modo

3

Eu tentei melhorar minha experiência com o vim, tentando mudar a cor da linha de status do vim toda vez que o modo muda.

Eu triend isto: (encontrado aqui )

    "Automatically change the statusline color depending on mode
function! ChangeStatuslineColor()
  if (mode() =~# '\v(n|no)')
    exe 'hi! StatusLine ctermfg=008'
  elseif (mode() =~# '\v(v|V)' || g:currentmode[mode()] ==# 'V·Block' || get(g:currentmode, mode(), '') ==# 't')
    exe 'hi! StatusLine ctermfg=005'
  elseif (mode() ==# 'i')
    exe 'hi! StatusLine ctermfg=004'
  else
    exe 'hi! StatusLine ctermfg=006'
  endif

  return ''
endfunction

... e incluem:

set statusline+=%{ChangeStatuslineColor()} 

Mas há um problema: se você alternar para o modo insert e depois pressionar Esc para voltar ao modo normal , ele não alterará a cor de volta. Ela só mudará a cor quando você inserir manualmente um modo diferente.

    
por rossijonas 14.01.2018 / 14:32

1 resposta

0

Modificar dinamicamente o grupo StatusLine highlight é a abordagem errada. Isso substitui quaisquer predefinições do esquema de cores e parece não funcionar (talvez a adição de um :redraw[status] possa ajudar, mas isso tornaria a implementação ainda mais feia).

O Vim permite especificar um grupo de realce personalizado na linha de status (até múltiplo), com o símbolo %#HLname# . Veja :help 'statusline' para detalhes. Você pode alterar dinamicamente o valor 'statusline' (isso também permite cores diferentes para diferentes linhas de status) ou usar a abordagem %!MyStatusLine() que reavalia o próprio valor.

    
por 24.01.2018 / 09:25