通过搜索,我突出显示了要更改的字符串。现在,我只想替换突出显示的文本。我正在使用n前进到搜索字符串的下一个实例。我以为我可以做类似ciw的操作,但是这会改变整个单词,而不仅仅是突出显示的文本。

我熟悉:%s/old/new/g,但我不想更改所有实例。相反,我想将光标移到每个实例,然后决定是否更改它。

#1 楼

使用gn运动来编辑当前搜索匹配。下面的示例将当前匹配项更改为“ FooBar”:假设下一场比赛将以您可以使用.重复的相同方式进行更改。或通过.跳过一些匹配项,然后使用n。 />
cgnFooBar


评论


当您需要在不同的地方使用不同的替换字符串时,这绝对是正确的方法。我不确定似乎由gn调用的可视模式的细微差别,因此这是我刚刚发现的类似方法:c // e FooBar //

–杰夫
17年9月13日在1:51

有没有办法一次更改所有选择/比赛?基本上可以重构吗?

–老年性贫血
18-11-17在22:57



@Geremia,是的,:%s / oldtext / newstuff / g会将oldtext的所有匹配项更改为newstuff。

– zundarz
19年7月30日在16:28

@zundarz我不想做一个正则表达式,而只替换变量名。而不是打。多次,我可以使用:%norm。 (资源)。

–老年性贫血
19年7月30日在17:41



#2 楼

如果您已经使用/word?word搜索了单词。

您可以使用:%s//newword/gc将搜索词(newword)保留为空,从而用s//..替换以前搜索的单词。
c标志表示应确认所有更改,方法是按y(是)或n(否)。

评论


我知道您说过要看帮助,但您也可以明确提到您也可以按l,a和q(或)以各种方式结束确认周期。

–杰夫
17年9月13日在1:48

#3 楼

方法1

您可以利用gngN映射来完成所需的操作。 gn将向前搜索最后使用的搜索词,并直观地选择匹配项。 gN做完全一样的事情,除了它向后搜索。当与诸如c之类的运算符结合使用时,该运算符将应用于匹配,例如,如果最后一个搜索字符串为“ foo”并键入cgn,它将向前搜索下一个“ foo”实例,将其删除,然后将您置于插入模式下以输入替换文本。

有关这些的更多信息,请参阅:help gn:help gN

方法#2

您可以将:substitute命令与c标志一起使用。这将要求您确认每次替换。例如,假设您要在整个文件中用bar替换foo,但要确认每次替换:

:%s/foo/bar/gc


有关此的更多信息,请参见以下帮助主题: :help :s_flags:help cmdline-ranges:help :substitute