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 ngược trong tìm kiếm / tìm kiếm VIM?


96

Ví dụ, nếu tôi muốn tìm và thay thế bằng các chuỗi chứa dấu gạch chéo lùi hoặc về phía trước, thì điều này sẽ được thực hiện như thế nào trong vim? Cảm ơn bạn!

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

điều gì sẽ xảy ra nếu tôi muốn tìm tất cả các lần xuất hiện <dog/>và thay thế nó bằng<cat\>


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

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

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

@aequalsb :help magiclà thứ bạn nhập bên trong vim. Nó không phải là một đối số dòng lệnh để vim.
doubleDown

Câu trả lời:


150

Giống như cách bạn thoát các ký tự ở hầu hết mọi nơi khác trong các chương trình linuxy, với dấu gạch 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 cách khác để thay thế:

:%s@<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 mất thời gian, khó hiểu trong các mẫu có rất nhiều dấu gạch chéo.

Từ tài liệu :

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


1
Vì vậy, nó sẽ tự động tìm ra dấu phân cách bạn đã chọn?
bão táp vào

11
Đúng. Ký tự sau dấu 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 rằng ít nhất /:;*%@#là hợp lệ.
Cascabel

Điều này rất hữu ích khi thay thế \ thành / trong một tệp có nhiều đường dẫn kiểu Windows. Cảm ơn.
Isaac Nequittepas

Để có được thông điệp trong tài liệu, sử dụng: h e146
jcollado

Không biết bạn có thể thay đổi dấu phân cách! Đó là rất lớn - cảm ơn.
Brettins

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

Bạn có thể thay thế các dấu phân tách / nếu chúng trở nên khó chịu đối với một số mẫu nhất định.


3
+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 được sử dụng @trong thời gian 'thoát-mớ hỗn độn'
Jeffrey Jose

8

Trích dẫn chúng bằng một dấu gạch chéo ngược. Ngoài ra, nó thường hữu ích để sử dụng một 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 làm dấu phân cách lệnh thay thế

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


2

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


Lưu ý rằng ?sẽ thực hiện tìm kiếm ngược và không giống nhau.
Martin Tournoij

-1

dấu gạch chéo ngược dấu gạch chéo ngược dấu sao

/(<- the prompt)\/\*

vì vậy sau khi bạn nhập, nó trông giống như

/\/\*

1
Câu trả lời này khác với những câu trả lời đã có trên trang web gần sáu năm như thế nào?
Martin Tournoij
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.