gpt4 book ai didi

vim - 在 Vim 中,如何搜索和替换所有其他匹配项?

转载 作者:行者123 更新时间:2023-12-04 00:01:10 25 4
gpt4 key购买 nike

说我有以下文件

<block>
<foo val="bar"/>
<foo val="bar"/>
</block>
<block>
<foo val="bar"/>
<foo val="bar"/>
</block>

我怎么能把它变成
<block>
<foo val="bar1"/>
<foo val="bar"/>
</block>
<block>
<foo val="bar1"/>
<foo val="bar"/>
</block>

我尝试做的一件事是用 :%s/bar/bar1/gc 录制一个宏。然后按 yn一次,然后尝试编辑该宏。由于某种原因,我无法编辑宏。 :(

最佳答案

只是为了表明这可以在替换中完成:

:let a = ['', '1']
:%s/bar\zs/\=reverse(a)[0]/g

概述

在每个 bar 的末尾替换数组的第一个元素在变量 a 中在每次替换时就地反转数组之后。

细节的荣耀
  • let a = ['', '1']定义一个变量 a保存我们的数组
  • %s/.../.../对文件中的每一行进行替换
  • %s/bar\zs/.../在 bar 上进行替换,但在 bar 后使用 \zs 开始替换
  • \=:s 的更换部分内命令使用以下表达式的值
  • reverse(a) reverse 只是简单地反转数组,但就地执行
  • reverse(a)[0] reverse 返回现在反转的数组,因此获取第一个元素
  • /g替换行中的所有出现(可选)

  • 一般情况
    :let a = ['a', 'b', 'c']
    :%s/bar\zs/\=add(a, remove(a, 0))[-1]/g

    一般情况下“旋转”数组, a ,就地并使用数组的最后一个位置作为替换的替换值。

    如需更多帮助,请参阅
    :h :s
    :h range
    :h /\zs
    :h :s\=
    :h reverse(
    :h :s_flags
    :h Lists
    :h add(
    :h remove

    关于vim - 在 Vim 中,如何搜索和替换所有其他匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13763880/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com