【问题标题】:for loop with substitutionfor 循环替换
【发布时间】:2022-01-14 08:03:47
【问题描述】:

我想通过 for 循环 作为替代命令范围:

for i in range(x, y) | is/$/foo/ | endfor

但我被Trailing characters: foo/ | endfor打中了

【问题讨论】:

    标签: vim sed substitution


    【解决方案1】:

    Vim 报告的错误对于您的命令中的实际问题有点误导。

    实际的问题是变量i不能这样使用。整个替换必须与:help expr-.. 连接并传递给:help :execute。在这种情况下:

    for i in range(x, y) | execute i .. 's/$/foo/' | endfor
    

    如果您不这样做,is/$/foo/ 中的 i 将被解释为文字 i,因此您使用的命令是 :help :isearch,而不是 :help :s。因此,Vim 报告了对 :is 的滥用,并且完全——而且是正确地——忽略了你的初衷。

    然后还有另一个问题,与手头的问题无关::help :s 已经在一个范围内工作,因此不需要循环:

    execute x .. ',' .. y .. 's/$/foo/'
    

    【讨论】: