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
逆にややこしいような気がしないでもない。