2014-10-26 2 views
0

Образец для замены:ВИМ: как заменить как эту ситуацию

hello world (one) hello world (two two) hello world (three three three) 

Результат я хочу:

hello world $one# hello world $two two# hello world $three three three# 

Я пытался использовать:

s/(\(\w\\+\s*\))/$\1#/g 

но это не работает.

+0

Вы ДОЛЖНЫ использовать одну замену, не так ли? В противном случае 's/(/ $/g' и' s /)/#/g' будут делать – gboffi

+0

. Я тестировал перед публикацией, используя vim version 7.4.430 и конфигурацию vim по умолчанию для тестирования Debian. – gboffi

+0

Это не искажено –

ответ

2

Выполнение этих двух простых замен является гораздо более интуитивным и намного быстрее, чем тратить свое время, пытаясь придумать ни с одной:

:s/(/\$/g 
:s/)/#/g 

В любом случае:

:s/(\([^)]\+\))/\$\1#/g 

результаты поиска part: Мы ищем открытое parenthese, за которым следует один или несколько символов, которые не закрывают круглые скобки, которые мы помещаем в группу захвата, а затем закрываем parenthese.

Замененная часть: Мы заменяем знак доллара, за которым следует наша группа захвата, за которой следует октоторп.

+0

Спасибо. Он работает нормально. И я тоже получаю один ответ выше. –

0

Большое спасибо всем. Я проснулся. :s/(\(\(\w*\s*\)*\))/$\1#/g. Предыдущая команда может дать правильный результат, который я хочу.

Смежные вопросы