Можно ли преобразовать вхождений следующей строки в моем коде:Поиск и замена формата функции в коде
foo(a,d);
в
foo(a) = d;
Можно ли преобразовать вхождений следующей строки в моем коде:Поиск и замена формата функции в коде
foo(a,d);
в
foo(a) = d;
В Vim можно использовать команду подстановки, как это :
:%s/\v(\w+)\((\w+),(\w+)\)/\1(\2) = \3/g
Это будет выглядеть в виде func(arg1,arg2);
и конвертировать в func(arg1) = arg2;
В этом выражении используется \v
, так что Vim использует режим very magic
, что делает его намного ближе к стандартной нотации Perl RegEx. (См @ комментарий FDinoff, чтобы показать, насколько менее читаемым будет без)
Что такое \ v for? – TheLoneJoker
@TheLoneJoker, который должен заставить мое регулярное выражение использовать режим «очень волшебный». В основном это делает регулярный двигатель Vim, как движок регулярных выражений Perl. Я не знаю, использовать ли это для моей конкретной команды, но я почти всегда использую ее только для того, чтобы держать меня в здравом уме :) –
Похоже на это без '\ (\ w \ + \) (\ (\ w \ + \)), \ (\ w \ + \)) 'поэтому ... вероятно, стоит в этом случае для удобства чтения. – FDinoff
Это может быть сделано с sed
sed 's:\(\w\+\W\w\+\)\(,\)\(\w\+\)\();\):\1)=\3;:g' < $file > $OutFile
я много рефакторинга (в том числе полностью автоматизирован один), и должен предупредить вас о том, что ответы ниже немного неверны *: они не (и не могут правильно) обрабатывать случаи, когда 'a' и' d' (аргументы) не являются тривиальными выражениями. – Dummy00001