Vimで編集中のテスト実行結果(nose)をプレビュー表示する+α

VimPython + TDD な事をしていたらVimスクリプトが出来てたので公開します。

私のPC環境

他OSでの動作確認はしていません。。。
使用は自己責任で、ご自由に。

Vimからnoseを実行する

参考にしたページ

編集中のテストの実行結果をプレビュー表示します。
また、編集中のファイルがテストコードでなければ、test_<編集中のファイル名>に対してテストを実行します。

例)編集中のファイルが"hoge.py"の場合、"test_hoge.py"をカレント以下のディレクトリから探し、

:!nosetests -v test_hoge.py

を実行します。

注意

あくまでも テストコード 1ファイルの実行結果 です。
SCMにコミットする前に全体で nosetests -v もしておいた方がいい。

  • .vimrcに以下を追加する。
"preview nosetests output
function! Nosetest(args) range
    set previewheight=18
    let src = expand("%")
    if src !~ "[Tt]est.*\.py$"
        let filepaths = split(src, "\\")
        let filepaths[-1] = "test_" . filepaths[-1]
        let src = expand("**/" . filepaths[-1])
    endif
    let dst = "Nosetest Output"
    " open the preview window
    silent execute ":pedit! " . dst
    " change to preview window
    wincmd P
    " set options
    setlocal buftype=nofile
    setlocal noswapfile
    setlocal syntax=none
    setlocal bufhidden=delete
    " replace current buffer with nosetest's output
    silent execute ":%! nosetests " . a:args . " " . src . " 2>&1"
    " change back to the source buffer
    wincmd p
    set previewheight=12
endfunction

"<F10>でnosetest -vを実行し、結果をプレビュー表示
map <silent> <F10> :call Nosetest("-v")<CR>
"<S-F10>でプレビュー表示を閉じる
map <silent> <S-F10> :silent exec ":pclose!"<CR>
"<F11>でnosetest -v --with-gae を実行し、結果をプレビュー表示
map <silent> <F11> :call Nosetest("-v --with-gae")<CR>

コード下部に日本語コメントも書いてありますが、

  • F10でnosetests -v
  • F11でnosetests -v --with-gae
  • Shift + F10でプレビュー表示を閉じる

が出来るようになります*1

おまけ1・vimPythonスクリプトをそのまま実行する

参考にしたページ

参考ページと同じですが、は単語の補完と衝突するのでに変更しました。これは便利!

" <F5>でpython実行
function! s:Exec()
    exe "!" . &ft . " %"
:endfunction
command! Exec call <SID>Exec()
map <silent> <F5> :call <SID>Exec()<CR>

*1:nose, nose-GAEは各自で入れてください