Подтвердить что ты не робот

/in vi Поиск и замена?

в vi, поиск и замена, как вы избегаете "/" (косую черту), чтобы она была правильной. Скажите по пути.

like:/Пользователи/tom/documents/pdfs/

:%s//Users/tom/documents/pdfs//<new text>/g  --FAILS (obviously)

:%s/\/Users/tom/documents/pdfs\//<new text>/g -- FAILS with a trailing error

:%s/'/Users/tom/documents/pdfs/'/<new text>/g -- FAILS with a trailing error

Что мне не хватает?

4b9b3361

Ответ 1

Вам также необходимо избежать косой черты.

:%s/\/Users\/tom\/documents\/pdfs\//<new text>/g

Ответ 2

В качестве альтернативы вы можете сделать :%s,foo/bar/baz,foo/bar/boz,g - я почти никогда не использую косые черты из-за избегающей путаницы.

Ответ 3

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

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

:%s#/Users/tom/documents/pdfs/#<new test>#g

Это отлично работает в vim. Я не уверен на 100% относительно ванили vi.

Ответ 4

Я знаю, что этот вопрос несколько лет, но для других, кто может приземлиться на него, ищущего более легкое решение, в 2014 году вы можете заменить разделитель "/" на что-то еще, например "!", если вы сделайте это спереди, посередине и спине, например:

:%s!foo/bar/baz!foo/bar/boz!g

Очень похоже на ответ Медера... Но, я считаю, что восклицание намного проще рассматривать как разделитель. И я просто хотел подтвердить, что этот метод все еще работает в текущей версии VIM, которую я использую в Mac OSX Mavericks.

Ответ 5

Вы можете использовать ? для поиска

В случае поиска шаблона в регистре, и шаблон содержит символ "/", вы можете просто использовать команду ? вместо команды / из обычного режима, чтобы начать сопоставление шаблонов. В этом случае для '/' char больше необходимости не требуется. (однако вам нужно сбежать '?' char сейчас)

? будет искать в обратном направлении /, поэтому, если вы не против направления поиска, и ваш шаблон поиска не содержит "?" char.

Кроме того, проверьте escape() script, если вы хотите больше.