Skip to content

@tpope /cucumbertables.vim

Embed URL


Subversion checkout URL

You can clone with
Download ZIP
inoremap <silent> <Bar> <Bar><Esc>:call <SID>align()<CR>a
function! s:align()
let p = '^\s*|\s.*\s|\s*$'
if exists(':Tabularize') && getline('.') =~# '^\s*|' && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p)
let column = strlen(substitute(getline('.')[0:col('.')],'[^|]','','g'))
let position = strlen(matchstr(getline('.')[0:col('.')],'.*|\s*\zs.*'))
normal! 0
call search(repeat('[^|]*|',column).'\s\{-\}'.repeat('.',position),'ce',line('.'))

I'm wondering, what does the "l1" option on the match of the Tabularize?


l means left align; 1 means one space of padding.


Would you recommend putting this in a ftplugin so as to not slow down non-cucumber-related file editing?


If you do, make sure you add <buffer> to the map. In practice, I haven't had any issues with it being global.


Ah cool, thank you!


FYI: I just added this to my after/ftplugin/cucumber.vim and it works like a charm. Very nice.


Thanks! Added this to my vimrc and it works perfectly.


I copied this into my .vimrc. And I have installed Tabular.vim successfully.
But it doesn't work. I input ab | cd | ef and nothing happened. What's wrong?!


@jznhljg, that doesn't look like a valid Cucumber table to me.


@tpope, I just want to edit some plain text, can I use this function to automatically adjust the padding space?


Sure, if you relax the regex a bit. As it stands now, it's hell bent on avoiding false positives.


I was looking for some solution for dealing with Cuke tables in gVIM similar or close to the one TextMate bundle for Cucumber has.
But this is so much better, thanks a lot Tim, as usual :)


For those interested, I made a modified version of this that does the same for equals (=) signs. You can find it in the list of forks to the right, or here:
Credits still go to Tim for the awesome original, I just made a few small changes.


For those who are interested I made a little plugin that you can use easily with pathogen, it is available here:

Feedback are welcome,



For those interested, I made a little plugin that extends this concept to creating full fledged tables as you type :). It is available here - You can put let g:table_mode_border=0 in your vimrc to get the same behavior as this plugin.

Also you can change the separator itself by let g:table_mode_separator='=' or whatever you need to achieve the same effect for other type of characters. Please refer to the :h table-mode.txt for more information. Feedback is welcome :).


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.