Это всегда довольно изворотливо, особенно при выделении ресурсов в конструкторе; в зависимости от Вашего языка не назовут деструктор, таким образом, Вам будет нужно к вручную очистке. Это зависит от как, когда время жизни объекта начинается на Вашем языке.
единственное время я действительно сделал его, когда была проблема безопасности где-нибудь, которая означает, что объект не должен, а не не может, быть созданным.
В vim вы должны добавить (
, )
и |
с обратной косой чертой, поэтому попробуйте
:%s/print\s*\(.\{-}\);/printnlog(\1);/g
Хотя вы можете создавать группы захвата (как вы это делаете), я думаю, что самый простой подход - выполнить эту работу в несколько этапов с очень простыми регулярными выражениями и словами-флажками. Например:
:%s/print "testcode.*/printnlog(XXX&XXX);/
:%s/XXXprint //
:%s/;XXX//
В этих примерах я использую «XXX» для обозначения границ, которые впоследствии следует обрезать (вы можете использовать все, что не отображается в вашем коде). Амперсанд (&) берет всю строку соответствия и вставляет ее в заменяющую строку.
Я не знаю, как другие люди, но я могу печатать и выполнять эти три регулярных выражения быстрее, чем я могу думать с помощью группы захвата.
1144092]
Достаточно ли этого для ваших нужд?
%s/print\s*\("[^"]*"\)/printnlog(\1)
MBO's answer works great, but sometimes I find it easier to use the "very magic" option \v
so I don't have to escape everything; makes the regex a little more readable.
See also:
:h /\v
in Vim