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.