コマンドプロンプトを使ってPythonスクリプトを起動するVimプラグイン

とりあえずVimからPythonのスクリプトを起動したい場合は普通は次のようにすると思うけど、これだと少し不便なことがある。

:!python %
"または
:!start python %
"%は現在編集しているファイル名に自動的に置換される

Windowsの場合は前者の方法で起動すると、そのPythonスクリプトが終了するまでエディタを全く操作できなくなる。スクリプトを動かしながらソースを見たり編集したいときは後者の方法を取らなければならない。これはPythonコマンドに限らず他のコマンドでもそう。

基本的にはこれでいいんだけど、これで起動すると毎回新しいコマンドプロンプト(もどき)が動きだすため、前回までに表示したログが消えてしまうのがちょっと嫌。
あと、次のようにメインスクリプトが他のディレクトリに配置されているモジュールを使う場合、mod1.pyを編集しながらmain.pyを起動するってのはよくあること。

main.py
module/
 -mod1.py
 -mod2.py

違うバッファに入るたびにカレントディレクトリを切り替えるプラグインを使っていると、フルパスで入力しない限りVimコマンドの履歴をそのまま使うことはできないので*1ちょっと面倒くさい。
なので、自分でコマンドプロンプトをある程度制御することにした。

run_python.vimプラグイン(※pywin32パッケージが必要)

run_python()
現在開いているバッファをメインスクリプトとして起動する。
redo_python()
コマンドプロンプトがあれば前回実行したスクリプトをもう一度実行する。無ければ現在のバッファをメインスクリプトとして起動する。

使い方

:python run_python()
" 次のようにキーマップして使うと楽
" noremap <C-w> :python run_python()

*1:最初にmain.pyを開いている状態で「:!python main.py」と打って実行し、次にmod1.pyを開いて前回のコマンドをそのまま使ってもディレクトリが違うので実行できない。