Vim: Como detectar o modo em que o usuário está, para statusline?
Eu preciso de uma maneira simples (ou complexa) para descobrir em que modo o usuário está. Eu preciso saber se o usuário está em Normal, Inserir, Visual, Substituir, Alterar etc.
Estou ciente domode()
função, no entanto, eu não consigo descobrir como fazer a saída de uma string completa em vez de apenas um caractere.
Meu plano era criar uma função que mudasse dinamicamente as cores de fundo e de primeiro plano da linha de status, dependendo de qual stringmode()
retorna. Basicamente uma função com um monte de ifs e elseifs que faria isso por mim. Existe uma falha com essa abordagem, não sei qual cor a configuração do tema por padrão para isso.
Então, basicamente, eu preciso de algumas dicas / ajuda sobre como fazer uma função que faz o seguinte:
Sabe qual modo o usuário está. O resto das funções reagem de maneira diferente toda vez que isso muda.Define algumas variáveis comfg
ebg
valores que refletem o que o tema atual definiu para eles.Altera o primeiro plano e o segundo plano da linha de status, dependendo desses valores.Eu tentei fazer isso, mas foi uma maneira muito grosseira de fazer isso e não funcionou. Só definiu as cores uma vez e depois disso não reagiu toda vez que mudava.
Obrigado pela ajuda! :)
EDITAR:
Tenho certeza que o que eu tentei antes que não funcionou foi isso:
function! StatuslineModeColor()
let s:StatuslineMode=mode()
if s:StatuslineMode == 'n'
hi Statusline ctermbg=blue guibg=blue
elseif s:StatuslineMode == 'i'
hi Statusline ctermbg=red guibg=red
endif
endfunc
E na linha de status eu coloquei o seguinte:
let &stl.='%{StatuslineModeColor()}'
EDIT 2:
Eu descobri que basicamente o que eu preciso fazer é encontrar uma maneira de pegar as cores que o tema estava usando antes. Isso é se eu usar essa solução:http://www.reddit.com/r/vim/comments/gexi6/a_smarter_statusline_code_in_comments/c1n2oo5
No entanto, esta solução não é ideal em meus padrões, porque não é limpa, ou tão limpa quanto poderia ser, uma vez que faz muita confusão. : /