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. : /