vimshell で特定のコマンドを実行したあとに insert を抜ける

以前はコマンドを実行したあとはすべて normal に戻るようにしていたんですが、今は insert のままになるようにして vimshell を使用しています。
これは連続してコマンドを実行したい場合に insert のままの方が便利だと感じたからです
しかし、それでも実行に時間がかかるような処理(git push や foreman start など)は normal に戻ってくれたほうが嬉しい場合もありました。
と、言うことで特定のコマンドを実行したあとに insert を抜けるようなスクリプトを書いてみました。

[ソース]

" insert から抜けたいコマンドのパータン群
let s:leave_insert_patterns = '\%(' . join(map([
\   '^git status',
\   '^git push',
\   '^git submodule add',
\   '^foreman start',
\   'middleman server',
\], '''\%('' . v:val . ''\)'''), '\|') . '\)'

function! LeaveInsert_in_vimshell(args, context)
    if a:args =~ s:leave_insert_patterns
        call feedkeys("\<Esc>")
    endif
endfunction

augroup my-vimshell
    autocmd!
    autocmd FileType vimshell
\       call vimshell#hook#add('preexec', 'leave_insert', "LeaveInsert_in_vimshell")
augroup END


逆にややこしいような気がしないでもない。