用什么可以替换vi/vim中的单词?

6
例如,我有以下内容:
rm -f $(NAME).elf $(name).d

第二个“name”是拼写错误,也应该是“NAME”。

所以在 'N' 上,我做了 yw,然后移动到 'n'。

我意识到如果我现在按下 cw 进行更改,我将进入插入模式 - 但是我想,嗯,这只是多一个 ESC),然后我就可以用 p 插入已校正的版本了。

但在这种情况下,p 的效果就像 u 命令一样,它又把“name”放回去了。我猜是因为旧文本也加载到寄存器中了,而我没有意识到这一点。


是否有一个“用寄存器替换”的命令,可应用于单词/字母等?


2
为什么不直接在“name”的第n个位置做“4〜”呢?这也可以起作用。 - PKumar
1
@Kabir name 只是一个例子,它可能是 eman 或其他的拼写错误。 - Kent
1
@Kabir - Kent说得非常正确,但这对我也很有用! - OJFord
3
如果要切换大小写,你可以考虑使用 guwgUwg~w。这样可以避免计算字母数(4 可能会变成 40)。 - Kent
插件“easyclip”解决了这个问题和其他问题:https://github.com/svermeulen/vim-easyclip - Steve Vermeulen
显示剩余2条评论
4个回答

9

在你在 NAME 上运行了 yw 并移动到 name 后,你可以执行以下操作:

viwp

或者打高尔夫: vep

1
完美 - 谢谢。但是你能解释一下吗?我想要学习vim的命令,而不是记忆组合 :) - OJFord
@OllieFord viw 可视化选择了单词 name,现在如果你按下 p,所选对象将被未命名寄存器的值替换。 - Kent
啊,我明白了!到目前为止,我只用过 shift+V 来进行可视化行操作。 - OJFord

2
另一种方法:
ciw<Ctrl-r>0

或者

ce<Ctrl-r>0

这将允许使用 . 进行重复,而无需使用任何插件,正如您在评论中提到的那样,您目前正在避免使用它们。

2

我经常需要这个功能,所以我编写了一个插件来简化和加速操作:ReplaceWithRegister

这个插件提供了一个两合一的gr命令,可以将{motion} /文本对象、整行或当前选定区域中的文本替换为寄存器中的内容;旧文本将被删除到黑洞寄存器中,也就是说,它已经消失了。它可以自动处理许多特殊情况,并允许通过标准的.命令快速重复。如果您不喜欢它,它的页面上有其他替代方案的链接。

示例

如果您将NAME复制到默认寄存器中,并将光标放在n上,只需使用gre即可。 gr调用命令,e是覆盖要替换的整个name的运动。


1
谢谢 - 我会在掌握基础知识后查看它。我已经被建议(来自YouTube)首先学习基础知识,无需插件。我之所以接受肯特的答案,是因为它回答了我的具体问题并提供了默认配置。 - OJFord
这是一个不错的方法。两者之间的区别在于,使用Kent的答案,您将使用name覆盖默认寄存器的NAME,因此您只能进行一次替换(无需重新复制),而我的方法可以随时重新应用(即使使用.命令)。 - Ingo Karkat
啊,我没意识到(这次只有一个错别字)- 我以为我仍然可以使用 .。我想我肯定很快会回来安装你的插件 - 就像你说的那样,我相信我一直都是这样做的(直到现在都是复制-选择-粘贴)! - OJFord

0

你可以使用 gUiw 来改变 name 的大小写。


请查看OP的评论,这个建议已经提出,但我的意图是用寄存器中的任何内容替换单词 - 例如,也适用于像NMaE这样的拼写错误。 - OJFord

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接