diff options
-rw-r--r-- | plugin/put.vim | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/plugin/put.vim b/plugin/put.vim new file mode 100644 index 0000000..62a0013 --- /dev/null +++ b/plugin/put.vim @@ -0,0 +1,36 @@ +" A small plugin to replace a text object with the contents of a register. +" +" This is invoked with the 'cp' command. For example +" +" cpiw - replace the inner word with the contents of the default register +" "ncpiw - replace the inner word with the contents of register 'n' +" +" Notably, this command does not alter the contents of the default register, so +" this command may be repeated without worry for changing the editor state. + +noremap <silent> cp <cmd>call <sid>setcpreg(v:register)<bar>set operatorfunc=<sid>put<cr>g@ + +let s:savereg = '' +let s:cpbuf = '"' +function! s:setcpreg(r) abort + let s:cpbuf = a:r +endfunction + +function! s:put(arg, ...) abort + + if a:0 + echo a:1 + let vis = '`<' . a:arg . '`>' + elseif a:arg == 'line' + let vis = "'[V']" + elseif a:arg == 'block' + let vis = "`[\<C-v>`]" + else + let vis = "`[v`]" + endif + + let save = getreg('"') + silent! exec printf("norm %s\"%sp", vis, s:cpbuf) + call setreg('"', save) + +endfunction |