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

mhe*_*rzl 14 vim replace

我看到如何在特定行中搜索和替换,按行号指定,以及如何使用当前行作为对多行向下的引用进行搜索和替换.

如何仅在当前行中搜索和替换?我正在寻找一个简单的解决方案,不涉及链接解决方案指定行号.

Ste*_*n.W 22

替换所有出现的str1str2某些行:

:s/str1/str2/g
Run Code Online (Sandbox Code Playgroud)

g如果要仅替换第一个匹配项,请删除该选项.

  • 有趣的是,这么多年之后,我已经忘记了如何做到这一点,并最终寻找自己的答案来找回记忆。:-) (4认同)

Tot*_*oto 15

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

:.s/old/new/
Run Code Online (Sandbox Code Playgroud)

这将改变oldnew只在当前行.

  • 这只会改变第一次出现 (7认同)
  • 为什么要用点?我的意思是我知道点是当前行,但这是 `s//` 命令中的默认值。使用点与不使用点有什么区别吗? (4认同)
  • @dlmeetei:是的,会的。只需添加 `g` 标志来更改所有出现。问题是“如何仅在当前行中搜索和替换?”,我用点回答是考虑当前行的方式。 (3认同)
  • 注意:替换当前行中所有出现的内容:`.s/old/new/g` (2认同)

小智 7

确认 ( c) 并替换:

:s/foo/bar/gc
Run Code Online (Sandbox Code Playgroud)

找到 'foo' 的出现,并在用 'bar' 替换它之前要求确认。

Vim 为您提供以下选项:

replace with bar (y/n/a/q/l/^E/^Y)?
Run Code Online (Sandbox Code Playgroud)
  • y - 是的
  • n - 不
  • a - 替换所有出现的
  • q - 退出
  • l - 替换当前并停止(最后)
  • ^E( CTRL+ e) - 向下滚动
  • ^Y( CTRL+ y) - 向上滚动

现在,在您的情况下,您可以使用y,n和的组合l来实现您的目的。


wli*_*usr 5

如果要搜索并替换当前行中所有匹配的单词,则可以在命令模式下轻松地将simple substitute (s)g修饰符配合使用。

:s/search/replace/g
Run Code Online (Sandbox Code Playgroud)

如果您只想搜索和替换当前行中的第一个匹配单词,只需将g修饰符从命令中移开即可。

:s/search/replace/
Run Code Online (Sandbox Code Playgroud)

参考: :help substitute

  • 这应该被认为是最佳答案 (2认同)