The most intuitive way for me to run tests is to use a tmux split pane. I simply split my screen between my editor and a shell that runs tests (npm test
in this example). I've then set up a vim hotkey (,r
for me) to quickly send "up enter" to the last tmux pane used.
" Repeat last command in the next tmux pane.
nnoremap <Leader>r :call <SID>TmuxRepeat()<CR>
function! s:TmuxRepeat()
silent! exec "!tmux select-pane -l && tmux send up enter && tmux select-pane -l"
redraw!
endfunction
Even better, I've set up Ctrl-S
as a "save-and-repeat" key to make it all happen in one keystroke:
inoremap <C-s> <Esc>:w<CR>:call <SID>TmuxRepeat()<CR>a
noremap <C-s> :w<CR>:call <SID>TmuxRepeat()<CR>
Alternatively, you can use vim-dispatch, but it doesn't support colors and can be disorienting.