Vim: Как определить режим, в котором находится пользователь, для строки состояния?

Мне нужен простой (или сложный) способ выяснить, в каком режиме находится пользователь. Мне нужно знать, находится ли пользователь в режиме Обычный, Вставить, Визуальный, Заменить, Изменить и т. Д.

Я знаю оmode() функция, однако я не могу понять, как заставить его выводить полную строку вместо одного символа.

Мой план состоял в том, чтобы сделать функцию, которая бы динамически изменяла фон строки состояния и цвета переднего плана в зависимости от того, какая строкаmode() возвращается. В основном это функция с кучей ifs и elseif, которая сделает это для меня. Однако у этого подхода есть недостаток: я не могу знать, какой цвет для этой темы настроен по умолчанию.

В общем, мне нужны некоторые советы / помощь по созданию функции, которая выполняет следующие функции:

Знает, в каком режиме находится пользователь. Остальные функции реагируют по-разному каждый раз, когда это изменяется.Устанавливает некоторые переменные сfg а такжеbg значения, которые отражают то, что для них задана текущая тема.Изменяет передний план и фон строки состояния в зависимости от этих значений.

Я пытался сделать это, но это был очень грубый способ сделать это, и это не сработало вообще. Он устанавливал цвета только один раз и после этого не реагировал каждый раз, когда менялся.

Спасибо за вашу помощь! :)

РЕДАКТИРОВАТЬ:

Я уверен, что то, что я пробовал до этого, не сработало:

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

И в статусной строке я поставил следующее:

let &stl.='%{StatuslineModeColor()}'

РЕДАКТИРОВАТЬ 2:

Я понял, что в основном мне нужно найти способ выбрать любой цвет, который использовалась в теме ранее. Вот если я использую это решение:http://www.reddit.com/r/vim/comments/gexi6/a_smarter_statusline_code_in_comments/c1n2oo5

Однако это решение не является идеальным в моих стандартах, потому что оно не чистое или не настолько чистое, как могло бы быть, так как оно создает много беспорядка. : /