Используя VI, как я могу найти и заменить следующее утверждение? - PullRequest
0 голосов
/ 05 мая 2009

Мне нужно заменить следующее:

CREATE TABLE /*!32312 IF NOT EXISTS*/ `access`

до

CREATE TABLE IF NOT EXISTS `access`

Я пробовал

:%s/\/\*\!\d+(.*)\*\//\1/g

Но, похоже, этого не произошло. Что я делаю не так?

Ответы [ 3 ]

4 голосов
/ 05 мая 2009

Используйте «очень волшебный» и используйте разделители, отличные от значений по умолчанию, чтобы их было легче читать (и запоминать).

:%s@\v/\*!\d+(.*)\*/@\1@g

Без "очень магии" вы должны поставить обратную косую черту перед + и () (но не перед * или некоторыми другими вещами). Это не очень последовательно.

4 голосов
/ 05 мая 2009

vim требует обратной косой черты + (или вместо нее используйте *). Кроме того, вам необходимо добавить скобки для обратной косой черты в vim. Таким образом:

:%s/\/\*\!\d\+\(.*\)\*\//\1/g

Да, регулярные выражения Vix в старом стиле отстой: /

Редактировать: Как указано в комментариях ниже, + работает, если экранируется как \ +. И \ d на самом деле поддерживается, упс. Отредактировал пример регулярного выражения, чтобы исправить это. Также см. Пример Брайана Карпера для более краткой и читаемой версии.

1 голос
/ 05 мая 2009

Немного отличается и эффективнее с [^ *] +: -)

1,$s/\v\/\*\!\d+\s*([^*]+)\*\//\1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...