2010-05-27 31 views
12

Làm cách nào để giới hạn phạm vi tìm kiếm trong Vim đối với khối chức năng/lớp/mã mà con trỏ hiện đang ở, mà không cần phải tìm ra số dòng là gì? Việc có thể tìm kiếm trong lựa chọn trực quan cũng sẽ làm, vì có các phương pháp để chọn khối mã hiện tại.Giới hạn phạm vi tìm kiếm cho mã trong Vim

(Tương tự như this câu hỏi, nhưng chung chung hơn)

Trả lời

12

tôi sẽ chỉ cần sao chép và dán toàn bộ nội dung của "Searching with/and ?" (within a visual selection) from the Vim Tips Wiki.

Ở chế độ trực quan, /? sẽ cập nhật lựa chọn trực quan giống như bất kỳ lệnh nào khác lệnh di chuyển con trỏ khác (rằng , khi ở chế độ trực quan, tìm kiếm sẽ mở rộng lựa chọn).

Để thực sự tìm kiếm trong lựa chọn hình ảnh, bạn sẽ cần phải sử dụng nguyên tử \%V, hoặc sử dụng các dấu xác định bởi sự lựa chọn trực quan với các \%>'<\%<'> nguyên tử. Đây là được thực hiện tốt nhất bằng cách để lựa chọn hình ảnh với Esc trước khi nhập tìm kiếm của bạn. Bạn có thể muốn xem xét ánh xạ để tự động rời khỏi lựa chọn trực quan và nhập các nguyên tử thích hợp . Ví dụ:

:vnoremap <M-/> <Esc>/\%V 

Sử dụng bản đồ này, bạn có thể nhấn Alt - / để tự động điền trong một "tầm" cho tìm kiếm của bạn giống như sử dụng một lệnh Ex với :. Để sử dụng , hãy chuyển đến dòng đầu tiên của sở thích và nhấn V để bắt đầu lựa chọn trực quan khôn ngoan. Di chuyển xuống (nhấn j cho một dòng hoặc } cho một đoạn mã , v.v ...). Khi bạn có chọn khu vực bạn muốn tìm kiếm, nhấn Alt - /. Lựa chọn trực quan sẽ bị xóa và lệnh tìm kiếm sẽ bắt đầu. Bạn sẽ thấy:

/\%V 

Thêm những gì bạn muốn tìm kiếm, sau đó nhấn Nhập. Ví dụ, bạn có thể nhập xanh và thấy:

/\%Vgreen 

Khi bạn bấm Nhập, mỗi lần xuất hiện của "xanh" sẽ được đánh dấu, nhưng chỉ trong khu vực mà bạn có chọn trước đó.

Dưới đây là hai ví dụ khác làm không sử dụng lựa chọn trực quan. Chỉlệnh tìm kiếm đầu tiên trong các dòng từ 10 đến 20. Tìm kiếm thứ hai chỉ giữa các điểm a và b.

/\%>9l\%<21lgreen 
/\%>'a\%<'bgreen 
+0

tôi nên đã phát hiện ra rằng. * facepalm * – Walter

1

Đối với ngắn gọn:

" tldr; 
v i { <ESC> /\%Vsearch-term 

" Search for search-term within the current code block (defined by curly braces {}). 
" Begin in normal mode, then enter the following: 

" enter visual mode 
v 

" look for stuff in-between the current... 
i 

" curly braces enclosure 
{ 

" (now the enclosure should be highlighted) 

" exit visual mode 
<ESC> 

" search the last visual mode selection for search-term 
/\%Vsearch-term 

" note: to search within other enclosures, you can substitute curly braces for: 
" - parenthesis, 
" - square brackets, 
" - or other enclosure pair characters 
Các vấn đề liên quan