Хотя вы можете создавать группы захвата (как и вы), я думаю, что самый простой подход - выполнять работу в несколько этапов, с очень простыми регулярными выражениями и «помечать» слова. Например:
:%s/print "testcode.*/printnlog(XXX&XXX);/
:%s/XXXprint //
:%s/;XXX//
В этих примерах я использую «XXX» для обозначения границ, которые должны быть позже обрезаны (вы можете использовать все, что не появляется в вашем коде). Амперсанд (&) берет всю строку соответствия и вставляет ее в строку замены.
Я не знаю о других людях, но я могу набирать и выполнять эти три регулярных выражения быстрее, чем я могу думать через группу захвата.