Vim mappings for the win

I mostly work in source code hierarchies where for a given source file X.source the location of the file with the unit tests is tests/test_X.source and more often than not I need to do edit the unit tests after having opened the actual source file.

Being the geek that I am I *obviously* need to come up with some sort of optimisation or shortcut even if it takes 10x as long as stupidly typing in ":e tests/test_X.source" all the time :-)

Thankfully, the solution in vim turns out to be quite straightforward. The following mapping (conveniently added to your $HOME/.vimrc file) will open the unit test file when you type %%

nnoremap %% :e =escape(expand("%:h")."/tests/test_".expand("%:t"), "")^M

Please note that the last bit ("^M") is just one character (the Enter key) that you can get by typing ^V followed by the Enter key.

I guess what I should really do is write a configurable vim plugin that opens arbitrary files/locations based on the current buffer/location. Oh well, so much to do and so little time :P

About these ads

7 thoughts on “Vim mappings for the win

  1. I’ve done a plugin specifically for assisting you with switching focus from source/test pair windows when doing Python unit testing in Vim. It’s over here, at Github: http://github.com/nvie/vim-pyunit

    It’s pretty configurable, and if I can judge it correctly from your post, it probably suits your need without any additional configuration. The default behaviour creates tests in “tests/test_X.py”.

    Let me know if you find it useful. I’ll probably write a blog post about the plugin soon, maybe also a small screen cast of the plugin in action, too, if the moon alignment is right.

    Cheers,
    Vincent

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s