Не заменяйте внутри php-строк в vim - PullRequest
1 голос
/ 11 апреля 2011

В моей компании есть соглашение по написанию кода $ foo.$ bar (с пробелами).Поскольку я не мог ознакомиться с этим (я не хочу обсуждать: P), я написал следующую функцию vim-replace-function:

:%s/\(\w\|\]\|'\|\"\)\s\?\.\s\?\('\|\$\|\"\|(\)/\1 \. \2/eg

.., которая соответствует всему, что мне до сих пор было нужно.Но теперь у меня также есть String, которую я не хочу заменять.

Итак, как я могу игнорировать такие строки, как "foo.bar" или "foo.bar", но не $ foo. $ Bar?

Обновление: Я также был бы счастлив с полностью скриптовой функцией.Мне просто интересно, если нет другого способа, кроме как временно удалить все php-строки.Пересчет фактических позиций замещения был бы беспорядком, нет?

1 Ответ

1 голос
/ 08 июня 2011

Вы можете использовать подсветку синтаксиса здесь:

:%s/\(\w\|\]\|'\|\"\)\s\?\.\s\?\('\|\$\|\"\|(\)/\=synIDattr(synID(line('.'),col('.'), 0),'name')!~?'phpString\(Single\|Double\)'?submatch(1) . ' . ' . submatch(2):submatch(1).'.'.submatch(2)/eg

В основном это означает, что если строка под курсором не имеет синтаксического типа phpStringSingle и не phpStringDouble, то замените, добавив '. 'между каждой группой захвата, иначе оставьте все как есть.

Подробнее об этом можно узнать по адресу:

:h sub-replace-expression
:h expr1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...