Как избежать обратной и прямой косой черты в поиске / поиске 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\\>/


2

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


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

-1

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

/(<- the prompt)\/\*

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

/\/\*

1
Чем этот ответ отличается от тех, что были на сайте почти шесть лет?
Мартин Турной,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.