我有一个带有这样一行的文件:

foofoo.xy.barbar


我想将xy更改为gh。我尝试做2r-> gh,但是显然不起作用,因为它用xy取代了gg,然后将光标向左移动了一个位置。而不进入插入模式,或者不使用很多按键(例如:s / xy / gh /)?

评论

R进入替换模式。 :help替换模式以获取更多信息。

我尝试过vt.rgh。但是除了光标位置以外,结果与您相同。

您为什么不想进入插入模式?像cwgh 之类的东西可以正常工作。

@ durron597我不确定是否最小化击键是否是一个好标签,因此通常不是问题的实质。 (我拒绝了您建议的修改)...也许您应该在meta上进行讨论?

#1 楼

如果新文本的长度与旧文本的长度相同,则可以选择Vim的替换模式。在正常模式下,R(大写的“ r”)使您进入替换模式。这类似于某些其他文本编辑器中的“覆盖”:代替在插入模式下插入新字符,键入将替换光标下的字符,然后前进到下一个光标。 (可以像小写的r一样思考,但一次只能输入一个字符。)请使用:help replace-mode查找替换模式的文档。 .x,通过按R进入替换模式。现在,当您键入g时,它将替换“ x”并移至下一个字符,因此您可以键入h来替换“ y”。现在,您的编辑已完成,因此请转义以返回正常模式。

(当替换文本的长度与旧文本的长度相同时,此方法有效,但是如果替换文本的长度较长或较短,则满足您的所有需求:它将用移动的文本替换1,然后键入您要键入的文本。有很多方法可以使用c,例如:将光标放在c.之间,ct。x Escape表示要更改文本(直到“ ABC”为止,并带有“ ABC”。)


1将移动中的文本拖入未命名/ .寄存器,然后切换到插入模式,这样您就可以键入一些内容来替换它,然后转回普通模式。

评论


这适用于这种情况。如果您想将3个字符替换为2个字符怎么办?

–贡萨洛·里贝罗(GonçaloRibeiro)
2015年2月12日,1:19

好问题;修改为包括一种处理不同长度文本的方法。

– alxndr
2015年2月12日在1:22



是的,我知道。但是那样进入了插入模式,我很想知道在这种情况下是否有不使用插入模式的方法。并不是说我认为它很有用(但是我可能是错的)。

–贡萨洛·里贝罗(GonçaloRibeiro)
2015年2月12日在1:26



带有数字n的前缀,最多替换目标字符的第n次出现。这对于替换格式为w_x_y_z和a-b-c-d的部分标签很有用。也可以使用f代替t来删除限制字符。

–pkfm
19年12月6日在1:23

#2 楼

您可以通过几种方法来执行此操作,但我能想到的最简单的方法是:

; TL; DR

/>


fxcw<REPLACEMENT TEXT>跳至x(请参阅fx

help *f*说要更改单词(有关更多信息,请参阅cw:h *c*:help *w*) ,删除“ xy”文本并进入插入模式,让您将所需的内容放在此处。
是您要在示例中将其替换为-“ gh”的任何内容。 br />这种方法的一个优点是它使用了非常常用的文本操作和导航命令。另一个是“ xy”可以是任意长度,并且仍然可以使用。

如果光标已经在“ y”字符(或文本中要替换的任何字符)上,则可以使用:help cw。这告诉vim更改您所在的单词,即使您不在开头。有关cw和一般文本对象的更多信息,请参见.

评论


这不会让他处于插入模式吗?

– elyashiv
2015年2月12日于12:00

啊-没听懂他那部分问题。在那种情况下,是的-R是最合适的解决方案。

–科迪民意测验
2015年2月12日15:53

#3 楼

替换方式:

Rgh<Esc>


如果替换的长度与原始长度相同,则是最明显的解决方案,但您也可以这样做:

或:

2sgh<Esc>