如何有选择地更改突出显示的字符串?


11

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

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

Answers:


16

使用gn动作来编辑当前搜索匹配。下面的示例将当前匹配项更改为“ FooBar”:

cgnFooBar

有关此技术的重要之处在于,您可以通过重复更改.。假设下一场比赛将以您可以.重复使用的相同方式进行更改。或通过跳过一些匹配项n,然后使用.

Vimcasts在这件事上有一个不错的插曲:使用gn进行搜索匹配

有关更多帮助,请参见:

:h gn

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

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

@Geremia,是的,:%s/oldtext/newstuff/g会改变所有的比赛oldtextnewstuff
zundarz

@zundarz我不想做一个正则表达式,而只替换变量名。不用.多次击中,我可以使用:%norm .source)。
Geremia

7

如果您已经使用/word或搜索过单词?word

您可以通过将搜索字词()留空来用:%s//newword/gc替换以前搜索的词。newwords//..

c旗说,每一次变化应得到确认,按y了是或n否。

查看:help :s_flags有关确认标志的更多信息。


1
我知道你说来看看帮助,但你不妨明确提到,你也可以按laq(或<Esc>)用于各种方式的收官确认周期。
杰夫

2

方法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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.