使用 vim 正则表达式编辑 gcode

使用 vim 正则表达式编辑 gcode

我需要编辑模型的 gcode,特别是我必须从所有 Z 坐标中减去数字 87。以下是 gcode 的示例:

;LAYER:435
G0 F9000 X-38.420 Y-26.887 Z87.300
;TYPE:WALL-INNER
G1 F1800 X-37.709 Y-27.459 E1386.91774
G1 X-37.020 Y-28.062 E1386.94819
G1 X-36.404 Y-28.635 E1386.97618

从上一个样本来看,有 Z87.300 ,我需要将其更改为 Z0.300 并对整个 Z 执行此操作。我在 vim 中尝试了以下命令:

:%s/Z\(\d\d\)/\="Z".submatch(1)-87/

但它的行为是错误的。

答案1

Vim 从左到右评估您的表达式,因此它首先将“Z”和匹配项连接起来,然后从字符串中减去 87(得到 0)。可以使用括号修复此问题:

:%s/Z\(\d\d\)/\="Z".(submatch(1)-87)/

为了更明确(​​并处理以 开头的十进制数0),您可以加入str2nr(),如下所示:

:%s/Z\(\d\d\)/\="Z".(str2nr(submatch(1))-87)/

相关内容