vimではできないんだね!
「スはスペックのス〜RSpecによるテスト駆動開発の実演〜」, 今日のRuby札幌での発表の精神とスライド資料をより深く理解するための映画3本(+1) - 角谷HTML化計画(2008-02-16)
それ、vimで出来るよ!
" eflg " 0 => short color bar " 1 => long color bar let s:eflg = 0 " Mode name let s:think = ' Think ' let s:red = ' Red ' let s:green = ' Green ' let s:refactor = 'Refactor' nmap <silent> <leader>m<C-m> :call <SID>ToggleMode()<CR> nmap <silent> <leader>mc :call <SID>ModeClear()<CR> nmap <silent> <leader>mt :call <SID>ModeThink()<CR> nmap <silent> <leader>mg :call <SID>ModeGreen()<CR> nmap <silent> <leader>mr :call <SID>ModeRed()<CR> nmap <silent> <leader>mf :call <SID>ModeRefactor()<CR> let s:original = escape(&statusline, ' ') if s:eflg == 1 let s:endflg = 1 endif func! s:ToggleMode() let s:my_mode = (s:my_mode + 1) % 4 if s:my_mode == 0 | call s:ModeThink() elseif s:my_mode == 1 | call s:ModeRed() elseif s:my_mode == 2 | call s:ModeGreen() elseif s:my_mode == 3 | call s:ModeRefactor() endif endfunc func! s:ModeClear() let s:my_mode = -1 hi clear User1 hi User1 cterm=inverse,bold exe 'setlocal statusline=' . s:original endfunc func! s:ModeThink() let s:my_mode = 0 hi User1 ctermfg=white call s:SetStatusLine(escape(s:think, ' ')) endfunc func! s:ModeRed() let s:my_mode = 1 hi User1 ctermfg=red call s:SetStatusLine(escape(s:red, ' ')) endfunc func! s:ModeGreen() let s:my_mode = 2 hi User1 ctermfg=green call s:SetStatusLine(escape(s:green, ' ')) endfunc func! s:ModeRefactor() let s:my_mode = 3 hi User1 ctermfg=yellow call s:SetStatusLine(escape(s:refactor, ' ')) endfunc func! s:SetStatusLine(mode) exe 'setlocal statusline=%1*[' . a:mode . ']' . s:EndorHere('s:endflg', '%*') . '\ ' . s:original . '%=%*' endfunc func! s:EndorHere(flg, val) if exists(a:flg) return '' else return a:val endif endfunc call s:ModeClear()
キーバインドとかは適当に変更して使ってください。
(追記:名前は一応mode.vimで)
(追記:githubで公開しました。Sixeight/mode-vim · GitHub)