gpt4 book ai didi

vim 用数学表达式替换

转载 作者:行者123 更新时间:2023-12-01 12:27:37 26 4
gpt4 key购买 nike

我需要替换以下行:

[rescap] l=1.2u w=1.5u 

经过
[rescap] l=1.2u w=1.5u r=0.8k

r 0.8k 的值是 l/w

我正在 vim 中尝试(已经在 perl 中完成,但想使用 vim 实现)
:s/l=\\(.\*\\)u w=\\(.\*\\)u/l=\1u w=\2u r=\1*\2k/

但它不计算表达式并打印:

[rescap] l=1.2u w=1.5u r=1.2*1.5k



如果我尝试\= 计算表达式,它会假定 l 和 w 作为变量并抛出错误。
:s/l=\\(.\*\\)u w=\\(.\*\\)u/\=l=\1u w=\2u r=\1*\2/    

我必须使用 vim -s scriptfile 通过许多文件运行上述表达式。
只需要弄清楚上面的替换语句。

最佳答案

您正在寻找:

%s#\vl\=([0-9.]+)u\s+w\=([0-9.]+)u\zs.*#\=' r='.string(eval(submatch(1))/eval(submatch(2))).'u'

重要的是:
  • \=这告诉你将插入一个表达式——第三个(前两个是我使用非常神奇的正则表达式和 \v 引起的怪癖)-> :h :s\=
  • submatch()访问 \1\2
  • eval()将子匹配转换为浮点数,和 string()将其转换回来
  • 另请注意,为了在 \= 之后插入文本,您需要显式构建一个字符串

  • 然后,我用过:
  • \v简化正则表达式,
  • :s#而不是 :s/根据需要简化替换表达式 /计算除法,
  • \zs以简化替换表达式。

  • 最后需要知道的一条信息,要访问与正则表达式/模式相关的文档,请在您要查找的内容前面加上斜杠 -> :h /\v , :h /\zs

    关于vim 用数学表达式替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37805433/

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