Заменить с помощью VIM, повторно использовать часть шаблона поиска

Я работаю с VIm и пытаюсь настроить команду поиска и замены, чтобы выполнить некоторые замены, где я могу повторно использовать регулярное выражение, которое является частью моей строки поиска.

Простым примером может служить строка, в которой я хочу заменить (10) на {10} , где 10 может быть любым числом.

Я зашел так далеко

  .s/([0-9]*)/what here??/ 

который точно соответствует той части, которую я хочу.

Теперь замена, я попробовал

  .s/([0-9]*)/{\0}/ 

Но это дает в качестве вывода {(10)}

Затем я попробовал

  .s/(\zs[0-9]*\ze)/{\0}/ 

Однако это дало мне ({10}) , который я также закрываю, но не то, что я хочу.

Я думаю, мне нужен другой вид маркировки / обратной ссылки вместо этого \0 , но я не знаю, где искать. Итак, вопрос в том, можно ли это сделать в vim, и если да, то как?

2 Solutions collect form web for “Заменить с помощью VIM, повторно использовать часть шаблона поиска”

\0 – весь матч. Чтобы использовать только его часть, вам нужно установить его так и использовать \ 1

 .s/(\([0-9]*\))/{\1}/ 

Более подробную инструкцию вы можете найти здесь или в помощи vim.

Недавно я унаследовал некоторый код устаревшего кода, и я хотел заменить все вхождения, такие как:

 print "xx" print x,y print 'xx' 

в

 logging.info("xy") 

или

 logging.info(x,y) 

Основываясь на предыдущем ответе и в надежде, что кто-то выиграет от этого, я использовал следующий скрипт, который изменит все вхождения:

 %s/print\( .\*\)/logging.info\(\1\)/g 

Если вы замените % на . и удалите /g вы закончите с

 .s/print\( .\*\)/logging.info\(\1\) 

что позволит вам пройти каждый матч и выбрать, измените ли вы его или нет.

  • эхо настраивать сообщение с редактором VIM
  • Почему Vim отступал код неправильно?
  • Vim auto line-break работает не так, как ожидалось (обновление: проблема с неокомплектом)
  • В vim, как вы выполняете команду молча в фоновом режиме?
  • Как я могу получить доступ к процессу Vim после закрытия терминала на macOS?
  • Vim: Создание XML-текста «довольно»
  • SED Показывает CRLF, пока Vim не показывает
  • Автозапуск Vimrc не работает
  • Интерактивная команда дерева
  • неправильные / перезаписанные поля при использовании vim на экране GNU
  • Машина сохраняет резервные копии файлов, которые я уже удалил
  • Вимм-режим Vim для системного буфера обмена?
  • Interesting Posts

    AIX ftpd – как установить umask для данного пользователя?

    Форматировать образцы sar в реальном времени с помощью пасты и awk

    Получить устройство с большим номером 0 (bbffs subvolume)

    .desktop для приложения ncurses

    Как преобразовать этот формат временной метки в другой формат в Perl?

    Фильтрация для «DEBUG» в меньшем количестве не показывает результатов на некоторых машинах. Зачем?

    LFS не может подключиться к lfs / source – разрешено отклонение

    Как определить, где расширился архив

    Если у меня включена пересылка X11. Как запустить программу без нее в одном терминале?

    Запуск нового экземпляра приложения вместо продолжения приостановленного

    ") Ошибка синтаксиса Недействительный арифметический оператор (маркер ошибки"

    У вас есть прокси-сервер Samba для другого сервера?

    Быстрое ускорение мыши на XFCE4

    Как я могу выйти из графической среды из командной строки?

    «Сделать тест» не удалось при компиляции Python

    Linux и Unix - лучшая ОС в мире.