Как избежать обратной и прямой косой черты в поиске / поиске VIM?

97

Например, если бы я хотел найти и заменить строками, содержащими обратную или прямую косую черту, как это можно сделать в vim? Спасибо!

Примеры поиска и замены: :%s/foo/bar/g

что, если бы я хотел найти все вхождения <dog/>и заменить его на<cat\>

штурмовик
источник
3
Не совсем ответ, но вам, вероятно, следует прочитать: магия помощи
Том Моррис
+1 Том, вообще самое вменяемое решение при работе с более чем тривиальным регулярным выражением.
Рэнди Моррис
@Tom @Randy, однако ... vi --helpна моем сервере НЕ объясняется экранирование специальных символов ... вот почему люди приходят в stackoverflow, чтобы начать с ...
aequalsb
@aequalsb :help magic- это то, что вы вводите внутри vim. Это не аргумент командной строки для vim.
doubleDown

Ответы:

150

Точно так же вы экранируете символы в большинстве других программ для Linux с обратной косой чертой:

:%s/<dog\/>/<cat\\>

Но учтите, что вместо этого вы можете выбрать другой разделитель:

:%s@<doc/>@<cat\\>@

Это избавит вас от необходимости печатать все эти трудоемкие, запутанные обратные косые черты в шаблонах с множеством косых черт.

Из документации :

Вместо /окружающего шаблон и заменяющей строки можно использовать любой другой однобайтовый символ, но не буквенно-цифровой символ \, "или |. Это полезно, если вы хотите включить /в шаблон поиска или строку замены.

Каскабель
источник
2
Значит, он автоматически определит выбранный вами разделитель?
Stormist
13
Да. Символ после символа sсчитается разделителем. Я не могу понять, где я нашел список в документации, но я уверен, что по крайней мере /:;*%@#действительный.
Cascabel
Это удобно при замене \ в / в файле с множеством путей в стиле Windows. Спасибо.
Isaac Nequittepas
Чтобы перейти к этому сообщению в документации, используйте: h e146
jcollado
Не знал, что можно изменить разделитель! Это огромно - спасибо.
Бреттинс
22
%s:<dog/>:<cat>

Вы можете заменить разделители /, если они раздражают определенные шаблоны.

Сара
источник
3
+1 для :разделителя. Я не знал, что ты можешь это использовать. Я всегда использовал @во времена «беспорядка побега»
Джеффри Хосе,
8

Цитируйте их с обратной косой чертой. Кроме того, часто бывает полезно использовать другой разделитель помимо косой черты.

 :%s#<dog/>#<cat\\>#

или если вам нужно использовать косую черту в качестве заменяющего разделителя команд

 :%s/<dog\/>/<cat\\>/
Wallyk
источник
3

Синтаксис:

:%s/<dog\/>/<cat\\>/g
Маурицио Регинелли
источник
2

Я искал что-то подобное, чтобы искать значения регистров, содержащие /символ (для записи макроса). Решением было поиск с использованием ?токена вместо /.

Фернандо
источник
Обратите внимание, что ?будет выполняться обратный поиск, и это не то же самое.
Мартин Турной,
-1

обратная косая черта обратная косая черта звезда

/(<- the prompt)\/\*

так что после того, как вы наберете, это выглядит как

/\/\*
Джим К
источник
1
Чем этот ответ отличается от тех, что были на сайте почти шесть лет?
Мартин Турной,