2012-11-01 23 views
7

Tôi đang tìm cách di chuyển đến khung mở hoặc đóng tiếp theo của một loại nhất định, ví dụ: { hoặc }. Ví dụ:Di chuyển đến dấu ngoặc đơn mở hoặc đóng tiếp theo trong VIM

if(true) 
{ 
    for(int i = 0; i < 10; i++) 
    { 
     SomeFunction(); 
     SomeOtherFuntion(); 
    } 
} 

Hãy nói rằng con trỏ của tôi là trên 'S' trong SomeFunction() và tôi muốn nhảy đến tiếp theo }, ví dụ: khung cuối của vòng lặp for.

Cách hiệu quả để thực hiện việc này là gì? Cách duy nhất tôi có thể nghĩ đến là sử dụng /}[ENTER], nhưng tôi tự hỏi nếu có một cách đơn giản hơn.

Trả lời

3

Hãy xem :help motion.txt, nó chứa tất cả các lựa chọn thay thế khác nhau.

Đối với { trong cột đầu tiên, có ]]. Đối với những người chưa từng có, ]}. Trong nhiều ngôn ngữ, { thể hiện sự bắt đầu của một phương thức, sau đó có thể sử dụng ]m. Nhưng nói chung, tôi thấy không có vấn đề với đề xuất của bạn về /}<CR>. Nếu bạn sử dụng thường xuyên, bạn luôn có thể xác định một ánh xạ tùy chỉnh cho nó:

:noremap ]] /}<CR> 
+0

Vấn đề với '/} 'là tôi sử dụng ngón tay hồng cho cả ba khóa đó, vì vậy nó cảm thấy khó xử. Tôi quen thuộc với ']]' vv nhưng tôi muốn cái tiếp theo, bất kể nó có nằm trong cột đầu tiên hay không. Cảm ơn bạn đã đề xuất của bạn] m, nó có vẻ đầy hứa hẹn, tiếc là nó không hoạt động trong VsVim, vì vậy có vẻ như ánh xạ là cách duy nhất. – tmlye

+0

Tại sao bạn yêu cầu tính năng Vim nếu bạn muốn có tính năng VSVim? – romainl

+0

Vì tôi sử dụng Vim ở nhà và VSVim tại nơi làm việc. – tmlye

1

Mở rộng câu trả lời thông tin Ingo Karat của hơn một chút, đây là một bản đồ tùy chỉnh mà remaps ]] để bắt đầu một tìm kiếm tiếp theo { hoặc }[[ làm giống nhau nhưng ngược lại:

:noremap ]] /[{}]<CR> " Find next { or } 
:noremap [[ ?[{}]<CR> " Find prev { or } 
Các vấn đề liên quan