【发布时间】:2021-09-04 07:27:20
【问题描述】:
我知道在文件的每一行中都会多次出现 string1。我正在寻找用 string2 替换第二个的最短/最快的方法。尽管 vim 是我的偏好,但任何方法都可以。
【问题讨论】:
标签: vim substitution
我知道在文件的每一行中都会多次出现 string1。我正在寻找用 string2 替换第二个的最短/最快的方法。尽管 vim 是我的偏好,但任何方法都可以。
【问题讨论】:
标签: vim substitution
您可以使用\zs 找到“string1”的第二次出现。
基于:h \zs 示例,它将是
:%s/\(.\{-}\zsstring1\)\{2}/string2
在 Vim 命令模式下使用外部 sed 会更直接
:%!sed 's/string1/string2/2'
请参阅https://vi.stackexchange.com/questions/8621/substitute-second-occurence-on-line 了解更多实现方法。
【讨论】:
这是一种方法:
:%normal 0/string1^Mncgnstring2<CR>
细分:
:[range]normal <macro> 在[range] 的每一行上执行普通模式<macro>,% 是范围[<first line>,<last line>] 的简写,它涵盖了缓冲区中的每一行,0 是我们宏的第一个命令,它将光标放在行的第一列,这是一个好习惯,/string1^M 将光标移动到string1 的第一个匹配项,^M 是通过<C-v><CR> 获得的文字<CR>,n 将光标移动到下一个匹配项,cgnstring2 将当前匹配更改为 string2。请参阅:help :range、:help :normal、:help gn。
但是看看你尝试了什么并修复它会更有趣,而不是为你提供一个可行的解决方案。
【讨论】: