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


16

Я часто использую /команду поиска vim для проверки моих регулярных выражений (просто чтобы увидеть, что они соответствуют). После этого я обычно использую команду :%sreplace, где я использую это регулярное выражение из поиска в качестве строки, подлежащей замене, например, сначала я ищу такую ​​строку:

/TP-\(\d\{5\}\)-DD-\d\{3\}

Это соответствует именно то, что я хочу, поэтому я делаю свою замену:

:%s/TP-\(\d\{5\}\)-DD-\d\{3\}/\1/g

Но я должен написать снова все регулярное выражение здесь. Обычно это регулярное выражение намного длиннее, поэтому я ищу решение:

Существует ли какой-либо ярлык или скрипт vim для вставки этого шаблона поиска непосредственно в команду замены?

Я использую vim в терминале (нет gvim).

Ответы:


20

Как правило, пустое регулярное выражение означает использование ранее введенного регулярного выражения, поэтому :%s//\1/gследует делать то, что вы хотите.


Вау, это так просто! Именно то, что мне было нужно, спасибо.
— kars7e

10
Кроме того, если вы хотите проверить или изменить последний использованный шаблон, вы можете использовать Control-r затем, /чтобы вставить содержимое регистра поиска шаблона ( /) непосредственно в частично типизированную командную строку (например, сразу после :%s/).
— Крис Джонсен

это тоже очень полезный совет. Спасибо @Chris! +1
— kars7e

Что если я захочу добавить "\ 1", например, число 23? Как мне избежать его интерпретации как "\ 123"?
— Чемпион

@Champ Поскольку обратные ссылки только доходят до \9, нет никакой двусмысленности.
— Кусалананда

4

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

  • Поиск: вместо ?или /для поиска, попробуйте q/илиq?
  • для команд Ex, а не :пытатьсяq:
  • для выхода из этого режима используйте CtrlC

Читать больше см :help q:.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.