2010-03-17 41 views
58

Ví dụ: nếu tôi muốn tìm và thay thế bằng các chuỗi có dấu gạch chéo ngược hoặc tiến, thì điều này sẽ được thực hiện như thế nào? Cảm ơn bạn!Làm cách nào để thoát khỏi các dấu gạch chéo ngược và các dấu gạch chéo chuyển tiếp trong tìm kiếm/tìm kiếm VIM? Ví dụ:

Ví dụ Tìm & Replace là: :%s/foo/bar/g

gì nếu tôi muốn tìm tất cả các lần xuất hiện của <dog/> và thay thế bằng <cat\>

+3

Không đúng một câu trả lời, nhưng bạn nên có thể đọc: giúp kỳ diệu –

+0

1 Tom, nói chung là lành mạnh nhất giải pháp khi làm việc với một regex tầm thường hơn. –

+0

@Tom @Randy tuy nhiên ... 'vi --help' trên máy chủ của tôi KHÔNG cung cấp giải thích về việc thoát khỏi các ký tự đặc biệt ... đó là lý do tại sao mọi người đến với stackoverflow để bắt đầu ... – aequalsb

Trả lời

100

giống như cách bạn thoát khỏi nhân vật bất cứ nơi nào nhất khác trong chương trình linuxy, với một dấu chéo ngược:

:%s/<dog\/>/<cat\\> 

Nhưng lưu ý rằng bạn có thể chọn một dấu phân tách khác thay thế:

:%[email protected]<doc/>@<cat\\>@ 

Điều này giúp bạn tiết kiệm tất cả việc gõ tất cả những dấu gạch chéo ngược khó hiểu, tốn thời gian trong các mẫu với một tấn dấu gạch chéo.

Từ các tài liệu:

Thay vì '/' bao quanh mô hình và thay thế chuỗi, bạn có thể sử dụng bất kỳ ký tự single-byte khác, nhưng không phải là một nhân vật tự chữ và số, '\', '"' hoặc '|'. Điều này rất hữu ích nếu bạn muốn bao gồm một '/' trong mô hình tìm kiếm hoặc chuỗi thay thế

+0

Vì vậy, nó sẽ tự động tìm ra dấu phân cách đã chọn của bạn? – stormist

+6

Có. Ký tự sau 's' được lấy làm dấu phân cách. Tôi không thể tìm ra nơi tôi đã tìm thấy một danh sách trong tài liệu, nhưng tôi khá chắc chắn ít nhất là '/:; *% @ #' là hợp lệ. – Cascabel

+0

Ah, đã tìm thấy nó. Đã chỉnh sửa! – Cascabel

6

Trích dẫn chúng với một dấu gạch chéo. Ngoài ra, nó thường giúp sử dụng dấu phân cách khác ngoài dấu gạch chéo.

:%s#<dog/>#<cat\\># 

hoặc nếu bạn phải sử dụng dấu gạch chéo như delimiter lệnh thay

:%s/<dog\/>/<cat\\>/ 
18
%s:<dog/>:<cat> 

bạn có thể thay thế/delimiters nếu họ trở thành một. noying cho các mẫu nhất định.

+2

+1 cho dấu phân cách ':'. Tôi không biết bạn có thể sử dụng nó. Tôi luôn luôn sử dụng '@' trong thời gian 'thoát-lộn xộn' –

2

Cú pháp là:

:%s/<dog\/>/<cat\\>/g 
1

tôi đang tìm kiếm một cái gì đó tương tự, để tìm kiếm giá trị đăng ký chứa / ký tự (để ghi lại một macro). Giải pháp là tìm kiếm bằng cách sử dụng mã thông báo ? thay vì /.

+0

Lưu ý rằng '?' Sẽ thực hiện tìm kiếm lạc hậu, và không giống nhau. – Carpetsmoker

-1

xuyệc ngược sao slash xuyệc ngược

/(<- the prompt)\/\* 

như vậy sau khi bạn gõ nó trông giống như

/\/\* 
+1

Câu trả lời này khác với câu trả lời trên trang web trong gần sáu năm như thế nào? – Carpetsmoker

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