From b758ef5504a2ae4f147a5f650993133122d840a7 Mon Sep 17 00:00:00 2001 From: Josh Rahm Date: Mon, 12 Sep 2022 12:49:36 -0600 Subject: put.vim: support for 'cp' operator. The cp operator replaces a text object with the contents of a register while preserving the value of the default register to improve repeatability. --- plugin/put.vim | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 plugin/put.vim (limited to 'plugin') 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 cp call setcpreg(v:register)set operatorfunc=putg@ + +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 = "`[\`]" + else + let vis = "`[v`]" + endif + + let save = getreg('"') + silent! exec printf("norm %s\"%sp", vis, s:cpbuf) + call setreg('"', save) + +endfunction -- cgit