vim: використовувати рядок пошуку в команді заміну


16

Я часто використовую /команду пошуку vim для перевірки своїх регулярних виразів (просто щоб побачити, що вона відповідає). Після цього я зазвичай використовую команду :%sзаміну, де я використовую цей регулярний вираз з пошуку як рядок, який потрібно замінити, наприклад, спочатку шукаю такий рядок:

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

Він відповідає саме тому, що я хочу, тому я замінюю:

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

Але мені доведеться знову написати цілий регулярний вираз. Зазвичай цей regexp набагато довший, тому я шукаю рішення:

Чи існує який-небудь існуючий сценарій ярлика або vim-скрипта для вставки цього пошукового шаблону безпосередньо в команду заміну?

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

Відповіді:


20

Взагалі порожній регулярний вираз означає використовувати раніше введений регулярний вираз, тому :%s//\1/gслід робити те, що ви хочете.


Вау, це так просто! Саме те, що мені було потрібно, дякую.
— kars7e

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

це дуже корисний натяк. Дякую @Chris! +1
— kars7e

Що робити, якщо я хочу продовжити "\ 1" з числом, як, наприклад, 23? Як я можу не допустити, щоб його інтерпретували як "\ 123"?
— Чамп

@Champ Оскільки задні посилання йдуть лише до цього \9, неоднозначності немає.
— Kusalananda

4

Ще один хороший спосіб побачити попередні пошукові регекси, а також команди Ex та змінити їх - редагувати ці команди в звичайному режимі. У цьому режимі у вас будуть усі ваші повноваження vim, включаючи копіювання та вставлення.

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

Детальніше див :help q:.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.