Как поменять местами левую и правую части оператора присваивания C / C ++ в gvim? - PullRequest
0 голосов
/ 17 декабря 2010

Если честно, у меня действительно есть решение для этого, но поиск Google находит так много полезных советов для меня с этого сайта, что я должен был что-то внести обратно. Вот что я придумал. Для одной строки:

s / ^ \ (\ s \ + \) \ (. * \) = \ (. * \); / \ 1 \ 3 = \ 2; /

Для нескольких строк, начинающихся с текущей строки, добавьте .,.+<line count>. Например:

.,. + 28s / ^ \ (\ s \ + \) \ (. * \) = \ (. * \); / \ 1 \ 3 = \ 2; /

заменит текущую строку и следующие 28 строк. Это также должно работать для Java и Perl. Для Python пропустите конечную точку с запятой в шаблоне и подстановке (если только вы не используете тот тип, который использует необязательную точку с запятой).

После ввода всего этого я обнаружил, что у меня есть вопрос. Есть ли способ упростить его, чтобы у меня не было так много escape-символов?

Ответы [ 2 ]

2 голосов
/ 17 декабря 2010

Используйте «очень волшебство»: добавьте \v к выражению. Смотри :help magic. По сути, это означает, что все не алфавитно-цифровые символы имеют специальные (то есть значения оператора регулярного выражения) , если не экранировано , что означает, что их не нужно экранировать при использовании выше.

1 голос
/ 17 декабря 2010

Использование \ v в начале вашего регулярного выражения может помочь сделать его более читабельным.\ v означает «очень волшебный», что все символы имеют специальные символы, кроме символов в наборах «0» - «9», «a» - «z», «A» - «Z» и «_».

Таким образом, ваш первый пример может быть преобразован следующим образом:

s/\v^(\s+)(.*) \= (.*)\;/\1\3 = \2\;/

Теперь необходимо экранировать = и ;, чтобы идентифицировать их как литералы, но все другие символы с высоким ASCII«т.

...