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

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

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

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

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

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

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

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

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

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

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

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

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

  • Как отключить колокола / визуальные звонки в vim?
  • Поиск и замена следующих n слов в vi
  • Ctrl + Right и Right отправляют одну и ту же последовательность в Putty> Экран> Vim
  • Поиск «не новой строки» в vim?
  • Как написать любой Unicode-ключ без предварительно запрограммированного ключа для него в kbd?
  • Какое шифрование использует vim -x?
  • В чем разница между vi и vim?
  • vi - как присоединиться к разным конкретным линиям
  • 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\) 

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

    Interesting Posts

    CROSS компиляция файловой системы BTRFS

    Многопользовательский одновременный загрузчик с активной статистикой для всех файлов

    Как сканировать на наличие помех из-за _wide_ Wifi-каналов (40, 80 МГц)

    объявить: «дополнительные атрибуты не вступают в силу до последующих присвоений»

    Автоматическая инициализация билета на Kerberos при входе в систему

    virt-manager error "format = dir: 'dir' недопустимый формат" при создании qemu VM с ISO

    Как IP-протокол?

    Назначение специальных записей для конкретных удаленных клиентов DNSmasq

    Клавиатура Gnome-shell для «Внутреннего микрофона» на XF86Send

    как использовать только определенные адреса в подсети для traceroute?

    Два монитора: Intel VGA + Nvidia DVI

    Не удается найти файлы заголовков HDF5 при установке h4toh5 в Debian

    невозможно смонтировать раздел – как я могу его устранить?

    ошибка в редактировании vim, вызванная вкладкой или диакритикой?

    Разрешение пользователям без полномочий root на tty1 для Gnome X-server на Arch

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