diff options
author | Florian Pritz <bluewind@xssn.at> | 2010-10-20 18:28:02 +0200 |
---|---|---|
committer | Florian Pritz <bluewind@xssn.at> | 2010-10-20 18:28:02 +0200 |
commit | 8ba7502b9d5b464df065e6b8bbbace20f38e3549 (patch) | |
tree | f96ac00cc117f0e39acc59de5427c1828d9d6c28 /.vim/autoload/repeat.vim | |
parent | b3580b6147a1d8c5d2c9168aa764b7451ab40aaa (diff) | |
download | dotfiles-8ba7502b9d5b464df065e6b8bbbace20f38e3549.tar.gz dotfiles-8ba7502b9d5b464df065e6b8bbbace20f38e3549.tar.xz |
add new vim plugins
Signed-off-by: Florian Pritz <bluewind@xssn.at>
Diffstat (limited to '.vim/autoload/repeat.vim')
-rw-r--r-- | .vim/autoload/repeat.vim | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/.vim/autoload/repeat.vim b/.vim/autoload/repeat.vim new file mode 100644 index 0000000..e6ec409 --- /dev/null +++ b/.vim/autoload/repeat.vim @@ -0,0 +1,72 @@ +" repeat.vim - Let the repeat command repeat plugin maps +" Maintainer: Tim Pope +" Version: 1.0 + +" Installation: +" Place in either ~/.vim/plugin/repeat.vim (to load at start up) or +" ~/.vim/autoload/repeat.vim (to load automatically as needed). +" +" Developers: +" Basic usage is as follows: +" +" silent! call repeat#set("\<Plug>MappingToRepeatCommand",3) +" +" The first argument is the mapping that will be invoked when the |.| key is +" pressed. Typically, it will be the same as the mapping the user invoked. +" This sequence will be stuffed into the input queue literally. Thus you must +" encode special keys by prefixing them with a backslash inside double quotes. +" +" The second argument is the default count. This is the number that will be +" prefixed to the mapping if no explicit numeric argument was given. The +" value of the v:count variable is usually correct and it will be used if the +" second parameter is omitted. If your mapping doesn't accept a numeric +" argument and you never want to receive one, pass a value of -1. +" +" Make sure to call the repeat#set function _after_ making changes to the +" file. + +if exists("g:loaded_repeat") || &cp || v:version < 700 + finish +endif +let g:loaded_repeat = 1 + +let g:repeat_tick = -1 + +function! repeat#set(sequence,...) + silent exe "norm! \"=''\<CR>p" + let g:repeat_sequence = a:sequence + let g:repeat_count = a:0 ? a:1 : v:count + let g:repeat_tick = b:changedtick +endfunction + +function! s:repeat(count) + if g:repeat_tick == b:changedtick + let c = g:repeat_count + let s = g:repeat_sequence + let cnt = c == -1 ? "" : (a:count ? a:count : (c ? c : '')) + call feedkeys(cnt . s) + else + call feedkeys((a:count ? a:count : '') . '.', 'n') + endif +endfunction + +function! s:wrap(command,count) + let preserve = (g:repeat_tick == b:changedtick) + exe 'norm! '.(a:count ? a:count : '').a:command + if preserve + let g:repeat_tick = b:changedtick + endif +endfunction + +nnoremap <silent> . :<C-U>call <SID>repeat(v:count)<CR> +nnoremap <silent> u :<C-U>call <SID>wrap('u',v:count)<CR> +nnoremap <silent> U :<C-U>call <SID>wrap('U',v:count)<CR> +nnoremap <silent> <C-R> :<C-U>call <SID>wrap("\<Lt>C-R>",v:count)<CR> + +augroup repeatPlugin + autocmd! + autocmd BufLeave,BufWritePre,BufReadPre * let g:repeat_tick = (g:repeat_tick == b:changedtick || g:repeat_tick == 0) ? 0 : -1 + autocmd BufEnter,BufWritePost * if g:repeat_tick == 0|let g:repeat_tick = b:changedtick|endif +augroup END + +" vim:set ft=vim et sw=4 sts=4: |