Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Increment keywords with speeddating.vim
" Place in ~/.vim/after/plugin/speeddating.vim
" In Vim, -4 % 3 == -1. Let's return 2 instead.
function! s:mod(a,b)
if (a:a < 0 && a:b > 0 || a:a > 0 && a:b < 0) && a:a % a:b != 0
return (a:a % a:b) + a:b
else
return a:a % a:b
endif
endfunction
let s:cycles = [
\ ['true', 'false'],
\ ['TRUE', 'FALSE'],
\ ['True', 'False'],
\ ['on', 'off'],
\ ['ON', 'OFF'],
\ ['On', 'Off'],
\ ['yes', 'no'],
\ ['YES', 'NO'],
\ ['Yes', 'No']]
function! KeywordIncrement(word, offset, increment)
for set in s:cycles
let index = index(set, a:word)
if index >= 0
let index = s:mod(index + a:increment, len(set))
return [set[index], -1]
endif
endfor
endfunction
let s:handler = {'regexp': '\<\%('.join(map(copy(s:cycles),'join(v:val,"\\|")'),'\|').'\)\>', 'increment': function("KeywordIncrement")}
let g:speeddating_handlers += [s:handler]

jceb commented Oct 16, 2011

Thanks a lot. That's a really nice addon to the speeddating plugin.

Owner

tpope commented Oct 16, 2011

bronson commented Jun 16, 2014

Love this. Really hoping it gets into speeddating one day.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment