実装(プロダクト)コードとテストコードを行き来する
概要
IDEの便利な機能の一つとして、実装コードとテストコードの行き来があります。
Eclipseでいえば、例えばQuick JUnit Plugin for Eclipseです。
またEclipseで言えば実装ファイルからテストファイルを作成したり、その逆が出来たりします。
こういった作業の簡略化がTDDなどのしやすさにも繋がります。
これはかなり便利です。逆に言えばこれがないと不便です。
Javaの場合はEclipseを使うのでいいのですが、PHPをいじるときはVimです。PHPをいじるときはVimです。
Vimでも同じ事が出来るようにカスタマイズしましょう。
プラグインですでにあるのかもしれませんが、勉強のために自分で書いてみることにします。
結論
以下のコードを.vimrcに記述します。
命名規則(src/mainとかテストファイルのサフィックスがTestとか)が異なる場合は修正してください。
" @see http://vim-users.jp/2011/02/hack202/ " 保存時に対象ディレクトリが存在しなければ作成する(作成有無は確認できる) augroup vimrc-auto-mkdir autocmd! autocmd BufWritePre * call s:auto_mkdir(expand('<afile>:p:h'), v:cmdbang) function! s:auto_mkdir(dir, force) if !isdirectory(a:dir) && (a:force || \ input(printf('"%s" does not exist. Create? [y/N]', a:dir)) =~? '^y\%[es]$') call mkdir(a:dir, 'p') endif endfunction augroup END " 実装コードとテストコードを切り替える function! SwitchCode() let name = expand('%:t:r') if matchend(name, 'Test') == strlen(name) let path = expand('%:s?src/test?src/main?:s?Test??:p') else let path = expand('%:s?src/main?src/test?:r') . 'Test.'. expand('%:e') endif execute ':e ' . path endfunction nnoremap <silent> <Space>z :call SwitchCode()<CR>
動作確認
次のようなプロジェクト構成の場合
project └── src ├── main │ └── foo │ └── hello.php └── test └── foo └── helloTest.php
- hello.phpを開いている状態で→
z →helloTest.phpを開く - helloTest.phpを開いている状態で→
z →hello.phpを開く - 書き込み時にディレクトリが存在しない場合は作成有無を確認する
- TDDで書いていく時とか、リファクタ時に初めてテスト作る時にも安心!!
- Vim-users.jp - Hack #202: 自動的にディレクトリを作成するを参考にさせてもらいました
- 日本語は扱わない想定なのでiconv()しないようにしました