2010-10-21 37 views
12

Sau khi tìm kiếm nội dung nào đó, nếu bạn nhấn //, bạn có vẻ sẽ nhận được kết quả tiếp theo. Điều này khác với số điện thoại n như thế nào? Bạn nên sử dụng nó như thế nào? Những gì hiện //e phù hợp, và những gì các tùy chọn khác là có cho //?Lệnh tìm kiếm `//` hoạt động như thế nào trong Vim?

+11

Câu hỏi thường gặp khá rõ ràng: "các công cụ phần mềm thường được các lập trình viên sử dụng", vì vậy tôi không nghĩ rằng điều này nên được đóng lại. Tôi không thấy nhiều nhân viên kế toán hay nhân viên văn phòng sử dụng Vim :-) – paxdiablo

+0

Haha, và có cả một tag dành cho Vim. – Chetan

Trả lời

16

lệnh Các tìm kiếm là các định dạng sau:

/pattern/offset<cr> 

Nếu phần pattern được bỏ qua, việc tìm kiếm sẽ tìm kiếm mô hình cuối cùng đã được tìm kiếm. Nếu bù đắp là trái ra, không có bù đắp được áp dụng. Việc bù đắp về cơ bản là phải làm gì với con trỏ khi bạn đã tìm thấy mục pattern của mình.

Hầu hết người dùng vi quen thuộc với biến thể không có bù trừ, /pax<cr> và tìm kiếm lần cuối lặp lại, /<cr>, tương đương với n.

Trong ví dụ cụ thể của bạn, //<cr> giống như /<cr> và điều đó có nghĩa là lặp lại tìm kiếm cuối cùng và áp dụng không bù đắp.

Mặt khác, //e<cr> có nghĩa là lặp lại tìm kiếm cuối cùng và di chuyển con trỏ đến cuối mục tìm thấy. Offsets là:

[num]   [num] lines downwards, in column 1 
+[num]  [num] lines downwards, in column 1 
-[num]  [num] lines upwards, in column 1 
e[+num]  [num] characters to the right of the end of the match 
e[-num]  [num] characters to the left of the end of the match 
s[+num]  [num] characters to the right of the start of the match 
s[-num]  [num] characters to the left of the start of the match 
b[+num]  [num] identical to s[+num] above (mnemonic: begin) 
b[-num]  [num] identical to s[-num] above (mnemonic: begin) 
;{pattern} perform another search, see |//;| 

Một cộng hoặc trừ mà không có một num sử dụng 1.

+0

Câu trả lời hoàn hảo, vững chắc! Cảm ơn! – Chetan

4

//<CR> có nghĩa là lặp lại tìm kiếm cho mẫu cuối cùng không có bù đắp.

//e<CR> có nghĩa là lặp lại tìm kiếm cho mẫu cuối cùng, nhưng đất vào cuối trận đấu.

n cũng giống như /<CR> ở chỗ nó sử dụng các mô hình mới nhất cuối cùng bù đắp, tuy nhiên n giữ hướng ngoái trong khi / luôn tìm tiếp theo trận đấu.

Xem :h last-pattern:h search-offset để được giải thích kỹ lưỡng về các lệnh này và tùy chọn của chúng.

+0

Vì vậy, hiện tại '//' bắt đầu tìm kiếm từ đầu tệp? – paxdiablo

+0

Không, nó tìm kiếm từ phía trước bạn đang ở đâu. –

+2

Bù đắp là (thường) nơi bạn đang ở trong tập tin, bắt đầu từ đầu. '//' sẽ lặp lại tìm kiếm từ vị trí của bạn, trong khi 'n' sẽ lặp lại tìm kiếm từ vị trí phù hợp cuối cùng. Nhân tiện, bạn cũng có thể sử dụng '//' trong các lệnh thay thế và toàn cầu. Hữu ích nếu bạn có một chút phù hợp đặc biệt phức tạp để làm và bạn muốn thử nghiệm nó với một tìm kiếm thông thường trước. – Alligator

9

Một trong những tính năng đẹp của // là bạn có thể sử dụng nó với lệnh s. Vì vậy, nếu ban đầu bạn tìm kiếm /Foo và sau đó quyết định thay thế bằng Bar, bạn có thể thực hiện việc này mà không lặp lại mẫu đó. Chỉ cần thực hiện :%s//Bar/g

Rõ ràng điều này hữu ích hơn nhiều nếu mẫu phức tạp hơn một chút.

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