2009-11-06 2 views
48

в vi, выполните поиск и замените, как вам избежать «/» (косая черта), чтобы это было правильно. Скажи по пути./in vi Поиск и замена?

как:/Users/Tom/документы/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 

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

+1

Возможный дубликат [Как избежать обратной косой черты и косых черт в поиске/поиске VIM?] (Http://stackoverflow.com/questions/2465156/how-does-one-escape-backslashes-and-forward-slashes -in-vim-find-search) – Pureferret

ответ

55

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

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

@Sarah - Doh! Да спасибо! –

96

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

+0

Чувак, я об этом не знал! Я предполагаю, что вы могли бы использовать любой символ, чтобы разграничить поля? –

+0

Да, я так считаю, я просто привык к запятым. –

+0

Вы избили меня на несколько секунд :) – Bob

14

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

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

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

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

+0

Я не могу придумать, как вы могли бы добраться до vi в эти дни. Я думал, что большинство основных дистрибутивов Linux просто перенаправляют «vi» на vim с отключенным множеством функций. –

+2

Потому что linux не единственный os :) Многие из BSD кораблей с ванилью vi или nvi Большинство коммерческих систем unix также работают. Я помню (к несчастью) дни, когда приходится собирать vim на IRIX, потому что я не мог жить с ванилью vi. – Bob

+0

Не так давно Debian связал vi с nvi, как и NetBSD, FreeBSD и OpenBSD. Некоторые также поставляются с vim-as-vim. – DigitalRoss

3

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

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

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

2

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

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

? будет искать в обратном направлении /, так что если вы не против направления поиска, а ваш шаблон поиска не содержит «?», голец.

Кроме того, проверьте подлинник escape(), если хотите.

+0

Гений! Я просто искал (с '/') и не заменил, поэтому у меня не было разделителя для изменения. – Noumenon