Замена оператора равенства (==) на тождественный оператор (===) в Vim - PullRequest
3 голосов
/ 29 октября 2011

Я хочу изменить все вхождения == на ===, но при вводе команды :%s/==/===/g существующие операторы идентификации преобразуются из === в ====. Я попытался ввести команду :%s/\<==\>/===/g, но совпадения с образцом не найдены.

Ответы [ 3 ]

6 голосов
/ 29 октября 2011

Неформальное определение шаблона, приведенное в вопросе, можно прочитать как «два знака равенства в ряд, ни перед ними, ни после знак ". Естественный способ превратить это словесное описание в краткий Vim в форме регулярного выражения используется шаблон поиска \@<! и \@! multi элементы (см. :help /multi для обзора). Первое позволяет оставить вне вхождения, начинающиеся с определенного шаблона (см. :help /\@<!). последнее позволяет игнорировать случаи, заканчивающиеся неподходящим шаблон (см. :help /\@!).

:%s/=\@<!===\@!/&=/g

Как я могу судить по истории ваших вопросов и ответов на StackOverflow, замена, вероятно, должна быть выполнена в JavaScript или PHP файлы. Поскольку оба языка имеют оператор неравенства !==, а также === равенство один, == в первом также является предметом замены как вы описываете это в вопросе. Если это поведение нежелательно, измените указанная выше команда замещения выглядит следующим образом.

:%s/[!=]\@<!===\@!/&=/g
2 голосов
/ 29 октября 2011

некрасиво, но :%s/\([^=]\)==\([^=]\)/\1===\2/g

EDIT

Оказалось, что иб. имеет гораздо лучшее решение, так что посмотрите на его ответ. Это касается случаев !== и т. Д. Так что игнорируйте этот и посмотрите на его.

1 голос
/ 29 октября 2011

Попробуйте добавить флаг c в команду sed: %s/==/===/gc

Это позволит вам каждый раз выбирать с помощью y или n.Конечно, если их много, возможно, это не лучший план.

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