在 Vim 中,如何删除最后一个单词并用地图替换另一个单词?

在 Vim 中,如何删除最后一个单词并用地图替换另一个单词?

我经常进行这样的打字操作:

当我到处看到一个单词时,我喜欢复制它,所以我有一个简单的

: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

您可以使用ciwdiw不是然后使用插入模式粘贴:

: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在您的映射中启用该插件)。

相关内容