vim - 在 Vim 中的替换内替换

标签 vim replace

如何在替换中进行替换?

我知道您可以将光标下的当前单词放入替换中,但我想在将其作为输出之前对其执行替换。

例如:

  • 拥有通过 clbuttic filter 的文件并替换您知道受到更坏影响的词,例如去机构化(提示:美利坚合众国的 Consbrestution)。该文件也有一些被正确替换的词。
  • 在整个文档中将 Wooloomooloo 中的 o 更改为 0(并且仅针对该词)

一个真实世界的例子(来 self 的 vim 历史)正在 Latex 文档中运行

%s/\\begin{table}\[h\]/\\begin{table}\[H\]/c

我复制字符串的地方只是为了做一个小改动。

最佳答案

将 o 替换为 0 很简单:

:s/o/0/g

也许您想知道如何将它应用于(视觉)选择?

:s/\%Vo/0/g

编辑可能是你想要的(见评论)

:%s/\<\zs[Wolm]\+\>\ze/\=substitute(submatch(0), 'o', '0', 'g')/g

这是做什么的:

  • [Wolm]\+匹配仅包含 W 的序列, o , l , m
  • \<[Wolm]\+\>匹配(独立的)相同的(所以,Wooloomooloo 或mooWWlomo 都匹配,但不匹配amool 等)。
  • \zs标记替换的匹配 的开始,\ze结束
  • \=substitute(submatch(0), 'o', '0', 'g')替换匹配项(在 \zs\ze 之间)但替换为 0对于 o

你可以从这个模式开始

  • 替换 [Wolm]\+与你的实际目标
  • \zs...\ze 之外添加可选上下文这样你就可以减少匹配
  • 添加\c在模式的前面启用不区分大小写的匹配

关于vim - 在 Vim 中的替换内替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8111759/

相关文章:

javascript - 如何替换 .data javascript 函数中的逗号(使用 .replace)

javascript正则表达式替换html

file-type - 在 .vim 和 .vimrc 中组织文件类型设置的最佳方法?

windows - 在 gvim 的新选项卡中打开文件

linux - sed 在替换批处理文件中的单词时出现多个选项错误

c# - 正则表达式替换越来越多

replace - 如何替换 PowerPoint (.ppt) 文档中的文本?

javascript - Vim 减少 JavaScript 缩进

configuration - 所有窗口的单个 vim 状态行

vim - Vim 中不区分大小写的标签搜索