Используя VI, как я могу выполнить поиск и заменить следующую инструкцию?

StackOverflow https://stackoverflow.com/questions/823484

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

Для

CREATE TABLE IF NOT EXISTS `access`

Я пытался

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

Используйте "very magic" и используйте разделители, отличные от используемых по умолчанию, чтобы упростить чтение (и запоминание).

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

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

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

1,$s/\v\/\*\!\d+\s*([^*]+)\*\//\1
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top