我有以下映射,允许粘贴来自yank缓冲区的单词。 (cpw =更改粘贴字)
nmap <silent> cpw "_cw<C-R>"<Esc>
我想做的是允许以下命令
cpiw(更改单词中的粘贴 - &gt;像'iw'动作)
cpaw(更改粘贴一个单词 - &gt;就像'aw'动作一样)
任何动作{m} CP {M}
这是否可以允许映射,所以我不必为每个想要使用它的动作编写nmap?
提前致谢。
编辑:拼写错误。我的解决方案
在努力研究地图操作员之后,我成功地完成了一个完全符合我想要的功能。对于任何感兴趣的人,如下:
"This allows for change paste motion cp{motion}
nmap <silent> cp :set opfunc=ChangePaste<CR>g@
function! ChangePaste(type, ...)
silent exe "normal! `[v`]\"_c"
silent exe "normal! p"
endfunction
编辑 - 可能更好的新版本。
"This allows for change paste motion cp{motion}
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
答案 0 :(得分:11)
有一种方法可以定义自定义运算符,有关详细信息,请参阅:help :map-operator
。