Vim-将寄存器传递给操作员功能
我正在尝试实现ChangePaste操作符。它应该用寄存器中的文本替换文本 它可以很好地处理运动,因此我可以使用Vim-将寄存器传递给操作员功能,vim,Vim,我正在尝试实现ChangePaste操作符。它应该用寄存器中的文本替换文本 它可以很好地处理运动,因此我可以使用cp,文本将从默认寄存器中替换 现在我想能够使用不同的寄存器。我正在寻找如何将所选寄存器传递给操作员函数的信息。因此,如果有一种类型的acpiw,我希望脚本用registera内容替换一个内部字。这可能吗 迄今为止的代码: nmap <silent> cp :set opfunc=ChangePaste<CR>g@ function! ChangePaste(
cp
,文本将从默认寄存器中替换
现在我想能够使用不同的寄存器。我正在寻找如何将所选寄存器传递给操作员函数的信息。因此,如果有一种类型的acpiw,我希望脚本用registera
内容替换一个内部字。这可能吗
迄今为止的代码:
nmap <silent> cp :set opfunc=ChangePaste<CR>g@
function! ChangePaste(type, ...)
if a:0 " Invoked from Visual mode, use '< and '> marks.
silent exe "normal! `<" . a:type . "`>\"_c" . @"
elseif a:type == 'line'
silent exe "normal! '[V']\"_c" . @"
elseif a:type == 'block'
silent exe "normal! `[\<C-V>`]\"_c" . @"
else
silent exe "normal! `[v`]\"_c" . @"
endif
endfunction
nmap cp:set opfunc=ChangePasteg@
函数!更改粘贴(类型,…)
如果从可视模式调用:0”,请使用“<和”>标记。
静默exe“正常”`“c”@
elseif a:type=='line'
静默exe“正常!”[V']\“\U c”。@”
elseif a:type=='block'
静默exe“正常”`[\`]\“\u c.@”
其他的
静默exe“正常”`[v`]\“\U c”。@
恩迪夫
端功能
编辑:
使用v:寄存器和缓冲区变量的解决方案:
nmap <silent> cp :let b:changepaste_buffer = v:register<cr>:set opfunc=ChangePaste<CR>g@
function! ChangePaste(type, ...)
if a:0 " Invoked from Visual mode, use '< and '> marks.
silent exe "normal! `<" . a:type . "`>\"_c" . getreg(b:changepaste_register)
elseif a:type == 'line'
silent exe "normal! '[V']\"_c" . getreg(b:changepaste_register)
elseif a:type == 'block'
silent exe "normal! `[\<C-V>`]\"_c" . getreg(b:changepaste_register)
else
silent exe "normal! `[v`]\"_c" . getreg(b:changepaste_register)
endif
endfunction
nmap cp:let b:changepaste_buffer=v:register:set opfunc=ChangePasteg@
功能!更改粘贴(类型,…)
如果从可视模式调用:0”,请使用“<和”>标记。
无声exe“正常`\“_c”。getreg(b:changeplaste\u寄存器)
elseif a:type=='line'
静默exe“normal!”[V']\“\u c”.getreg(b:changeplaste\u寄存器)
elseif a:type=='block'
无声exe“正常`[\`]\“\u c”。getreg(b:changeplaste\u寄存器)
其他的
静默exe“正常”`[v`]\“\u c”.getreg(b:changepaste\u寄存器)
恩迪夫
端功能
如注释中所述,您可以访问函数中的v:register
变量
甚至不需要将其保存为缓冲区变量。:帮助v:在ChangePaste函数中注册它总是设置为“
。作为一种解决方法,我使用缓冲区变量存储最后一个寄存器,然后从该变量获取值。请参见编辑@你能不能把它作为一个答案加上,这样我就可以接受了?