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

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

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

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

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

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

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

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

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

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

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

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

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

  • sv_SE.UTF-8 Проблемы с Bash и VIM в iTerm2
  • Как сделать команду vim автоматически запущенной с помощью .vimrc?
  • Редактирование N-го события интерактивно в поиске в vim
  • Запустите макрос vim из сценария bash
  • Настройте bash и / или vim для запуска source ~ / .bashrc каждый раз, когда я закончу его редактирование
  • Заменить строку другой строкой в ​​редакторе vi
  • Вставка с пробелами, добавленными в заголовки строк (по аналогии с комментариями)?
  • Как показать номера строк в 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\) 

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

    Interesting Posts

    Создать карту network_iface_name <-> IPv4-адрес

    Cron для удаления определенных файлов из определенного каталога

    Эффективность совместного использования Samba отличается от Windows / Linux

    Помогите с пониманием регулярного выражения

    Почему `tmux` и` sudo, tmux 'возвращают 2 разных значения?

    Символ выходной вкладки в окне терминала

    Преобразуйте аргумент в верхний регистр, чтобы передать его как переменную

    Как разбить файл на несколько файлов на основе шаблона с помощью perl?

    В чем разница / отношение между именем ядра и именем ОС?

    В чем разница между «расширением» и «замещением» в терминах терминологии оболочки?

    Аппаратный ускоренный эмулятор Android с графическим процессором AMD

    Почему я продолжаю получать файл wget-log в ~ на Arch Linux?

    Замена одного сервера ssh другим при сохранении ключей

    Точка монтирования не существует, создайте каталог, затем «Файл существует»

    несоответствие версии протокола (клиент 8, сервер 6) при попытке обновления

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