gpt4 book ai didi

vim - 如何在Vim中不连续的行范围上重复相同的搜索和替换命令?

转载 作者:行者123 更新时间:2023-12-04 05:14:02 33 4
gpt4 key购买 nike

我遇到一种情况,我想在整个文件中用FOO替换BAR。但是,我只想在某些地方执行此操作,例如,在68–104、500–537和1044–1195行之间。在实践中,我将标记放在感兴趣的行处(通过mambmc等),并运行以下代码:

:'a,'b s/FOO/BAR/g | 'c,'d s/FOO/BAR/g | 'e,'f s/FOO/BAR/g
我不得不用不同的搜索来重复此操作数十次,并替换术语 s/CAT/DOG等,每次不得不重写命令行变得很痛苦。我很幸运,因为我只需要将搜索范围限制在三个位置即可(想象一下,如果有30个或40个,命令行将变得多么困惑)。
缺少编写函数的方法,有没有更整洁的方法呢?
在相关说明中。我将 FOO复制到 s(搜索)寄存器中,并将 BAR复制到 r(replace)并尝试运行
:'a,'b s/\=@s/\=@r/ | 'c,'d s/\=@s/\=@r/ | 'e,'f s/\=@s/\=@r/
这样可以避免我每次都必须重写命令行,但是,a,这行不通。替换位 \=@r很好,但是搜索模式中的 \=@s位给我一个错误。
任何提示将不胜感激。

最佳答案

如果您需要对一系列不同范围的行执行一组逐行操作(例如替换),则可以使用的一个技巧是通过首先添加前缀(任何其他人都不会共享)来使这些行看起来有所不同其他行)。

我通常这样做的方法是在第一行上使用>G之类的代码来缩进整个文件,然后使用:s/^ /X/命令或可视块将我想要的行上的前导空格替换为X。

然后将:g:s结合使用。例如:

:%g/^X/s/FOO/BAR/g
:%g/^X/s/BAZ/QUUX/g

最后,删除临时前缀。

关于vim - 如何在Vim中不连续的行范围上重复相同的搜索和替换命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11162784/

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