我经常进行这样的打字操作:
当我到处看到一个单词时,我喜欢复制它,所以我有一个简单的
:nmap <Leader>y yiw
然后我要用另一个单词(上面的所有单词)替换掉被拉出来的那个,所以我写
:nnoremap cp "_diwP
(cp 表示清除并粘贴)
例子 :
上一个被拉出的单词:“hello”
如果我在“bar”上执行 cp ,它会完美地工作(它会替换掉之前的 yank)
lorem ipsum bar foo
> lorem ipsum hello foo
但是当单词位于行末时(例如 'foo'),它会给出
lorem ipsum bar foo
> lorem ipsum barhello
所以我有一个
:nnoremap cP "_diwp
问题是如何“合并”
:nnoremap cp "_diwP
:nnoremap cP "_diwp
在一张地图上?
谢谢你的帮助。
答案1
您可以使用ciw
而diw
不是然后使用插入模式粘贴:
:nnoremap cp "_ciw<C-r>"<Esc>
或者,始终使用P
但随后删除原始单词:
:nnoremap cp "_yiwPl"_de
"_yiw
是转到原始单词的开头(b
如果光标已经在单词的第一个字符上,则会失败,并且类似的解决方法lb
也有缺陷,除非:set ve+=onemore
)。
答案2
我的ReplaceWithRegister 插件提供gr
与您的类似的映射,以处理像您这样的特殊情况。
另外,您可能对Smartput 插件;它会改变p
/P
命令以自动调整空格、逗号等。有了它,您也可以实现您的目标(尽管您必须使用:nmap
,而不是:nnoremap
在您的映射中启用该插件)。