2009-11-06 49 views
48

trong vi, tìm kiếm và thay thế, cách bạn thoát khỏi dấu '/' (dấu gạch chéo chuyển tiếp) để nó đúng. Nói trong một con đường./in vi Tìm kiếm và thay thế?

như:/Users/tom/tài liệu/file PDF/

:%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 

tôi đang thiếu gì?

+1

Bản sao có thể có của [Làm cách nào để thoát khỏi dấu gạch chéo ngược và dấu gạch chéo chuyển tiếp trong tìm kiếm/tìm kiếm VIM?] (Http://stackoverflow.com/questions/2465156/how-does-one-escape-backslashes-and-forward-slashes -in-vim-find-search) – Pureferret

Trả lời

55

Bạn cũng cần thoát khỏi các dấu gạch chéo ở phía trước.

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

@Sarah - Doh! Vâng, cảm ơn! –

96

Hoặc bạn có thể làm :%s,foo/bar/baz,foo/bar/boz,g - Tôi gần như không bao giờ sử dụng chém vì sự nhầm lẫn trốn thoát.

+0

Dude, tôi không biết về điều đó! Tôi đoán bạn có thể sử dụng bất kỳ nhân vật để phân định các lĩnh vực sau đó? –

+0

Vâng tôi tin như vậy, tôi đã quen với dấu phẩy. –

+0

Bạn đã đánh bại tôi sau một vài giây :) – Bob

14

Như Sarah đã đề xuất, bạn cần thoát khỏi tất cả dấu gạch chéo về phía trước.

Thay vào đó, bạn có thể sử dụng một ký tự khác ngoài dấu xuyệt tiến làm dấu phân tách. Điều này rất tiện lợi nếu chuỗi tìm kiếm của bạn có nhiều dấu gạch chéo trong đó.

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

Điều này hoạt động hoàn hảo trong vim. Tôi không chắc chắn 100% về vanilla vi.

+0

Tôi không thể nghĩ ra làm thế nào bạn thậm chí có được vi ở những ngày này. Tôi đã nghĩ rằng hầu hết các bản phân phối Linux lớn chỉ chuyển hướng 'vi' sang vim với nhiều tính năng bị tắt. –

+2

Vì linux không phải là hệ điều hành duy nhất :) Nhiều BSD có tàu vani vi hoặc nvi Hầu hết các hệ thống Unix thương mại đều hoạt động tốt. Tôi nhớ (không hạnh phúc) những ngày phải biên dịch vim trên IRIX bởi vì tôi không thể sống với vanilla vi. – Bob

+0

Cách đây không lâu Debian liên kết vi với nvi, cũng như NetBSD, FreeBSD và OpenBSD. Một số cũng được vận chuyển với vim-as-vim. – DigitalRoss

3

Tôi biết câu hỏi này là vài năm tuổi, nhưng đối với những người khác có thể tìm đến giải pháp dễ dàng hơn, trong năm 2014, bạn có thể thay thế dấu phân tách "/" cho cái gì khác như "!" bạn làm điều đó ở phía trước, giữa, và trở lại, như thế này:

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

Rất simiar để trả lời Meder của ... Nhưng, tôi thấy rằng các dấu chấm than là dễ dàng hơn nhiều để xem như một dấu phân cách. Và tôi chỉ muốn xác nhận rằng phương pháp này vẫn hoạt động trong phiên bản hiện tại của VIM, mà tôi đang sử dụng trong Mac OSX Mavericks.

2

Bạn có thể sử dụng ? để tìm kiếm

Trong trường hợp tìm kiếm mô hình trong một thanh ghi, và các mô hình có chứa một nhân vật '/', bạn chỉ có thể sử dụng ? lệnh thay vì / lệnh từ chế độ bình thường để bắt đầu mô hình kết hợp . Trong trường hợp như vậy, không cần phải thoát nhiều hơn cho '/' char. (tuy nhiên bạn cần phải thoát '?' ngay bây giờ)

? sẽ tìm kiếm theo hướng ngược lại /, vì vậy nếu bạn không nhớ hướng tìm kiếm và mẫu tìm kiếm của bạn không chứa '?' char.

Ngoài ra, hãy kiểm tra tập lệnh escape() nếu bạn muốn thêm.

+0

Genius! Tôi đã chỉ tìm kiếm (với '/') và không thay thế, vì vậy tôi không có một dấu phân cách để thay đổi. – Noumenon

Các vấn đề liên quan