2009-07-23 31 views
6

Tôi muốn tìm một dòng có cả 'foo' và 'bar' theo thứ tự này nhưng không nhất thiết phải cạnh nhau.Làm cách nào để tìm kiếm trong vim cho một dòng có 2 từ cụ thể?

Tôi đã thử các sau đây và nó đã không làm việc:

/foo.*bar 
+3

Có lẽ vấn đề của bạn là 'ma thuật' thiết lập. Đọc: giúp 'ma thuật' và: đặt ma thuật? để xem đó có phải là vấn đề không. – spatz

+0

đó là ... ma thuật là gì? –

Trả lời

11

Sử dụng:

:set magic 
/foo.*bar 

Thiết lập 'ma thuật' xác định cách VIM xử lý các ký tự đặc biệt trong các biểu thức chính quy. Khi nó tắt VIM xử lý tất cả các ký tự theo nghĩa đen, có nghĩa là biểu thức bạn đã viết foo.*bar sẽ thực sự tìm kiếm chuỗi đó. Tuy nhiên, khi 'ma thuật' được bật thì các ký tự regex đặc biệt có ý nghĩa đặc biệt của chúng và nó hoạt động giống như bạn mong đợi. Bạn nên luôn sử dụng :set magic trừ khi xử lý các tập lệnh Vi thực sự cũ, vì vậy chỉ cần thêm nó vào vimrc của bạn và bạn sẽ được thiết lập.

+0

Tôi khá chắc chắn đây là một mặc định hiện nay (ít nhất là vim của tôi trên cửa sổ). –

+1

Tôi đồng ý, nó cũng là mặc định, nhưng tôi không biết tại sao nó không được đặt cho Sasha - có lẽ anh ấy đang sử dụng một phiên bản cũ hơn hoặc gọi vi thay vì vim. – spatz

5

trình cho tôi:

/text.*text2 
+1

Làm việc cho tôi cũng như –

+1

Ditto; không phân biệt chữ hoa chữ thường: /FOO.*BAR\c –

+0

Thật không may "làm việc cho tôi" không đưa ra lý do tại sao hoặc có khả năng gây ra (s). – crw

0

Ngoài ra còn có một plugin tuyệt vời để một làm tìm kiếm Boolean trong vim:

LogiPat plugin

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