2012-01-16 18 views
5

Tôi có một số thay thế regex mà tôi thường xuyên thực hiện và do đó muốn ánh xạ khóa để thực hiện việc này một cách dễ dàng. Tuy nhiên, nếu một trong các regex được thay thế không được tìm thấy trong tệp, ánh xạ khóa của tôi sẽ dừng do E486: Pattern not found và không có thay thế nào khác được thực hiện. Ví dụ. nếu các bản đồ trong vimrc của tôi làVim: Bỏ qua các lỗi trong danh sách các thay thế được ánh xạ

map <F12> :%s/spam/foo/<enter>:%s/ham/bar/<enter>:%s/eggs/baz/<enter> 

và không có ham trong hồ sơ của tôi, eggs sẽ không được thay thế. Có một lá cờ tôi có thể đặt trên các thay thế để bỏ qua lỗi? Tôi đã đọc :help regex:help map mà không tìm thấy bất kỳ điều gì có thể sử dụng được.

Cách khác, có cách nào khác, dễ dàng hơn, rõ ràng hơn để làm điều này mà tôi đang thiếu?

+0

(Bạn có thể lưu '/' cuối cùng nếu bạn không gắn thêm cờ như 'g' hoặc' e' Birei được đề xuất: ':% s/spam/foo ' Cùng với dấu phân tách thứ hai nếu bạn chỉ muốn xóa nội dung nào đó (chỉ xuất hiện lần đầu trên mỗi dòng): ':% s/spam ') –

+0

Tôi biết. Tôi chỉ không thích có các dấu gạch chéo không được đính kèm;) – kthy

+0

Dấu gạch chéo không đi theo cặp :-) – romainl

Trả lời

14

Thêm cờ /e vào mỗi lệnh thay thế. Nó không hiển thị thông báo lỗi và tiếp tục như thể không có lỗi nào xảy ra. Đây sẽ là bản đồ mới:

map <F12> :%s/spam/foo/e<enter>:%s/ham/bar/e<enter>:%s/eggs/baz/e<enter> 
+0

Cảm ơn một bó, làm những gì nó nói trên tin. Không biết làm thế nào tôi bỏ lỡ>. < – kthy

8

Bạn có thể thêm một "lá cờ" ở phần cuối của mẫu:

:%s/spam/foo/e 

sẽ không nhổ một lỗi nếu nó không tìm spam và cho phép bạn để tiếp tục.

Xem :help flags.

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