Альтернатива экранированию косых черт в поиске и замене длинных строк

10

Есть ли альтернатива в поиске и замене vim для строк, кроме необходимости экранировать каждый специальный символ в строке.

Например, если я хочу сопоставить следующую строку и заменить что-то

[ERROR] Login unsucessful

Тогда я должен сделать

:%s/\[ERROR\]\ Login\ unsucessful/something/g

И это становится намного более уродливым и болезненным для сложных строк, содержащих много специальных символов

Я хотел бы сделать что-то вроде

:%s/"[ERROR] Login unsucessful"/something/g

что бы избежать всего спасения Есть ли такая особенность?

MohitC
источник

Ответы:

16

Вы можете использовать very-nomagicпереключатель. Смотрите :h \Vподробности. Это даст вам %s/\V[ERROR] Login unsuccessful/something/g. Существует также nomagicпереключатель \M, который является более легкой версией \Vи, кажется, не используется широко.

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

PhilippFrank
источник
Спасибо. Именно то, что я хотел. не получил это в моем поиске Google, не знаю почему.
MohitC
2
@MohitC я карта , /чтобы /\vдля того, чтобы «очень магия» для большинства запросов, поэтому я сопоставляюсь //с /началом неизмененного поиска (полезно для прохождения истории поиска игнорирования модификаторов) и /v/к /\Vбыстро отключить все волшебство для поиска.
Кайл Стрэнд
@MohitC На самом деле, мои настройки более сложны, чем это, потому что я также использую плагин, чтобы использовать «очень волшебный» как можно более последовательно во всех контекстах. Смотрите мой ответ здесь .
Кайл Стрэнд
7

Вам не нужно избегать пробелов. Итак, это:

:%s/\[ERROR\]\ Login\ unsucessful/something/g

на самом деле должно быть:

:%s/\[ERROR\] Login unsucessful/something/g

И, конечно, вы можете включить очень кочевой «режим», чтобы сделать эти специальные символы менее особенными:

:%s/\V[ERROR] Login unsucessful/something/g

См :help /magic.

romainl
источник
2

Помимо кочевых флагов упоминаются и другие ответы.

Часто бывает так, что вам не нужно быть точным в строке поиска

Например, чтобы соответствовать

[ERROR] Login unsucessful

Вы могли бы использовать выражение

.ERROR. Login unsucessful

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

RedGrittyBrick
источник