1

Мне нужно отредактировать gcode для модели, в частности я должен вычесть число 87 из всех координат Z. Вот пример кода:

;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 ответ1

1

Vim оценивает ваше выражение слева направо, поэтому сначала объединяет "Z" и соответствие, затем вычитает 87 из строки (что приводит к 0). Это можно исправить с помощью скобок:

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

Чтобы быть более явным (и обрабатывать десятичные числа, начинающиеся с 0), вы можете str2nr() , например:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .