2012-05-17 2 views
16

Для того, чтобы заменить каждое вхождение «&» к «& &» в диапазоне от текущей строки до более 30 строк, я выдавать :.,+30s/\\&/\\&\\&/g, но Вим говорит «Pattern не найден ». Я избегаю специального символа «&» двойным обратным слэшем «\».ВИМ: поиск и замена для «&»

ответ

13

Не пытайтесь убежать от всего - :.,+30s/&/&&/g, похоже, работает на меня.

+12

Чтобы уточнить: это не потому, что '&' не является метасимволом: в то время как в шаблоне это верно (если не был активирован «&» или был активирован режим очень магии), в строке замены '&' означает то же самое, что и '\ 0': вся подобранная подстрока. Поскольку «вся подобранная подстрока» является амперсандом, это решение работает. Также обратите внимание, что если опция «magic» была отключена, выражение «& in replacement представляет весь согласованный шаблон» является ложным в нескольких командах, включая ': s'. – ZyX

10

Вам не нужно избегать амперсанда в первой части регулярного выражения. Он имеет особое значение во второй (заменяющей) части.

Вы ищете образцы, которые говорят «\ &» и заменяют их шаблонами, которые говорят «\ & \ &».

Простой способ заменить просто:

:.,+30s/&/&&/g 
1

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

:.,+30s/ &/\& /g 
     ^