" Makes the 'yank' operator a repeatable operator. When repeating, the yank " operator will yank-append into the provided register, seperating each yank " entry with a newline. " " This is ergonomic for collecting snippets (like words) across a file and then let s:repeat_yank_first=1 let s:repeat_yank_reg='' function! s:do_repeatable_yank(typ) let reg = s:repeat_yank_reg let repeat = ! s:repeat_yank_first if s:repeat_yank_first let s:repeat_yank_first = 0 else let last_reg_info = getreginfo(reg) endif if a:typ == 'char' exec 'normal! `[v`]"' . reg . 'y' else exec "'[,']yank " . reg endif if repeat let cur_reg_info = getreginfo('"') call setreg( \ reg, \ last_reg_info.regcontents + cur_reg_info.regcontents, \ last_reg_info.regtype ) endif endfunction function! s:setup_repeatable_yank() abort let s:repeat_yank_reg = v:register let s:repeat_yank_first = 1 endfunction if exists('g:override_native_yank_behavior') && g:override_native_yank_behavior " Option for overriding default yank behavior. nmap yy gy_ nmap Y y$ nnoremap y call setup_repeatable_yank()set operatorfunc=do_repeatable_yankg@ else " By default make a new 'g' command 'gy' and 'gY' for this repeatable yank. nmap gyy gy_ nmap gY y$ nnoremap gy call setup_repeatable_yank()set operatorfunc=do_repeatable_yankg@ endif