2009-11-06 20 views
48

en vi, busca y reemplaza, ¿cómo escapas un '/' (barra diagonal) para que sea correcto? Di en un camino./in vi ¿Buscar y reemplazar?

como:/Users/TOM/documentos/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 

¿Qué me falta?

+1

Posible duplicado de [¿Cómo escapa una barra invertida y barra inclinada hacia adelante en la búsqueda/búsqueda de VIM?] (Http://stackoverflow.com/questions/2465156/how-does-one-escape-backslashes-and-forward-lashes -in-vim-find-search) – Pureferret

Respuesta

55

También debe escapar de las barras diagonales internas.

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

@Sarah - Doh! ¡Si, gracias! –

96

Alternativamente se puede hacer :%s,foo/bar/baz,foo/bar/boz,g - Casi nunca se Utilice barras debido a la confusión escapar.

+0

¡Tío, no sabía de eso! Supongo que puedes usar cualquier caracter para delimitar los campos, entonces? –

+0

Sí, eso creo, me acabo de acostumbrar a las comas. –

+0

Me ganas por unos segundos :) – Bob

14

Como Sarah sugirió, debe evitar TODAS las barras diagonales.

En su lugar, podría utilizar otro carácter además de barra diagonal como delimitador. Esto es útil si su cadena de búsqueda tiene muchas barras en ella.

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

Esto funciona perfectamente en vim. No estoy 100% seguro sobre vanilla vi.

+0

No puedo pensar en cómo conseguirías vi en estos días. Estaba pensando que la mayoría de las principales distribuciones de Linux redirigían 'vi' a vim con muchas características desactivadas. –

+2

Porque Linux no es el único sistema operativo :) Muchos de los BSD se envían con vanilla vi o nvi La mayoría de los sistemas comerciales de Unix también lo hacen. Recuerdo (por desgracia) los días de tener que compilar vim en IRIX porque no podía vivir con Vanilla vi. – Bob

+0

No hace mucho Debian vinculó vi a nvi, al igual que NetBSD, FreeBSD y OpenBSD. Algunos también se envían con vim-as-vim. – DigitalRoss

3

Sé que esta pregunta tiene varios años, pero para otros que pueden aterrizar en esta búsqueda de una solución más fácil, en 2014, puede sustituir el delimitador "/" por otra cosa como "!", Siempre y cuando lo haces delante, medio y posterior, así:

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

Muy simiar a la respuesta de Meder ... Pero, considero que la exclamación es mucho más fácil de ver como separador. Y solo quería confirmar que este método todavía funciona en la versión actual de VIM, que estoy usando en Mac OSX Mavericks.

2

Puede utilizar ? para buscar

En caso de búsqueda de patrones en un registro, y el patrón contiene un carácter '/', puede simplemente usar ? comandos en lugar de / comando del modo normal al iniciar la coincidencia de patrones . En tal caso, no se requiere más escape para '/' char. (sin embargo necesita escapar '?' char ahora)

? buscará en la dirección opuesta a /, por lo que si no le molesta la dirección de búsqueda, y su patrón de búsqueda no contiene '?' carbonizarse.

Además, consulte la secuencia de comandos escape() si quiere más.

+0

Genius! Solo estaba buscando (con '/') y no estaba reemplazando, así que no tenía un delimitador para cambiar. – Noumenon