如何仅在当前行中进行搜索和替换?

71
4个回答

97

在特定的行中,将所有出现的str1替换为str2

:s/str1/str2/g

如果您只想替换第一次出现的内容,请删除g选项。


59

您可以使用 . 代表当前行,例如:

:.s/old/new/

这将仅在当前行中将old更改为new


9
这将只会更改第一次出现的内容。 - dlmeetei
8
是的,它会。只需添加“g”标志以更改所有出现的情况。问题是“如何仅在当前行中搜索和替换?”,我已经回答了使用点号来考虑当前行的方式。 - Toto
是的,我以为您会更新您的答案并加上 g,因此留言提醒。 - dlmeetei
8
为什么要使用点号?我的意思是,我知道点号表示当前行,但这在s//命令中已经是默认设置了。使用点号和不使用点号有什么区别吗? - Doktor OSwaldo
3
请将文本从英语翻译成中文。仅返回已翻译的文本:注意:要替换当前行中的所有出现次数:.s/old/new/g - Rishabh Agrahari

20

如果您想在当前行中搜索和替换所有匹配的单词,您可以在命令模式下轻松使用带有 g 修饰符的简单的 substitute (s) 命令。

:s/search/replace/g

如果您只想在当前行中搜索并替换第一个匹配的单词,只需从命令中去掉 g 修饰符。

:s/search/replace/

参考::help substitute


12

确认(c)并替换:

:s/foo/bar/gc

查找“foo”的出现情况,在将其替换为“bar”之前征求确认。

Vim提供以下选项:

replace with bar (y/n/a/q/l/^E/^Y)?
  • y - 是
  • n - 否
  • a - 替换所有出现的内容
  • q - 退出
  • l - 替换当前内容并停止(最后一个)
  • ^E (CTRL + e) - 向下滚动
  • ^Y (CTRL + y) - 向上滚动

现在,在您的情况下,您可以使用ynl的组合来实现您的目的。


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