2016-02-19 3 views
-1

Можно ли преобразовать вхождений следующей строки в моем коде:Поиск и замена формата функции в коде

foo(a,d); 

в

foo(a) = d; 
+1

я много рефакторинга (в том числе полностью автоматизирован один), и должен предупредить вас о том, что ответы ниже немного неверны *: они не (и не могут правильно) обрабатывать случаи, когда 'a' и' d' (аргументы) не являются тривиальными выражениями. – Dummy00001

ответ

3

В Vim можно использовать команду подстановки, как это :

:%s/\v(\w+)\((\w+),(\w+)\)/\1(\2) = \3/g 

Это будет выглядеть в виде func(arg1,arg2); и конвертировать в func(arg1) = arg2;

В этом выражении используется \v, так что Vim использует режим very magic, что делает его намного ближе к стандартной нотации Perl RegEx. (См @ комментарий FDinoff, чтобы показать, насколько менее читаемым будет без)

+0

Что такое \ v for? – TheLoneJoker

+2

@TheLoneJoker, который должен заставить мое регулярное выражение использовать режим «очень волшебный». В основном это делает регулярный двигатель Vim, как движок регулярных выражений Perl. Я не знаю, использовать ли это для моей конкретной команды, но я почти всегда использую ее только для того, чтобы держать меня в здравом уме :) –

+1

Похоже на это без '\ (\ w \ + \) (\ (\ w \ + \)), \ (\ w \ + \)) 'поэтому ... вероятно, стоит в этом случае для удобства чтения. – FDinoff

1

Это может быть сделано с sed

sed 's:\(\w\+\W\w\+\)\(,\)\(\w\+\)\();\):\1)=\3;:g' < $file > $OutFile