2012-06-24 36 views
53

Có chuyển động nào để chuyển sang phần bắt đầu hoặc kết thúc của một lựa chọn trực quan không? Tôi biết o trong khi ở chế độ trực quan xen kẽ giữa hai chế độ này, nhưng tôi cần có khả năng chọn chính xác điểm bắt đầu. Mục tiêu tổng thể là bao quanh một khu vực được chọn trực quan với dấu ngoặc đơn.Làm cách nào để chuyển đến phần bắt đầu/kết thúc của lựa chọn trực quan?


Dựa trên nhận xét, tôi có thể triển khai điều này bằng cách sử dụng macro sau. Ý tưởng là để:

  1. <ESC> để thoát chế độ hình ảnh
  2. `< để đi đến tận cùng của vùng chọn hình ảnh trước
  3. a) để nối thêm một dấu ngoặc đóng
  4. <ESC> để thoát chế độ chèn
  5. `< để chuyển đến phần bắt đầu của lựa chọn hình ảnh trước đó
  6. i( để chèn phần mở dấu ngoặc đơn
  7. <ESC> để thoát chế độ chèn lần nữa.

ví dụ:

map \q <ESC>`>a)<ESC>`<i(<ESC> 

Dựa trên nhận xét khác, chúng tôi có một giải pháp thậm chí ngắn gọn hơn,

map \q c()<ESC>P 
+0

Lỗi: số 2 phải là' '>' – JJoao

Trả lời

9

Cách dễ nhất để "bao quanh một khu vực được lựa chọn trực quan với ngoặc" là:

c Hange khu vực được lựa chọn trực quan để ()P ut nó trở lại ở giữa. = c()<ESC>P

Tôi đề nghị xác định một vimrc lệnh visual-mode mới (ví dụ: "\ q") với điều đó:

:vmap \q c()<ESC>P 

Cách tiếp cận này cũng làm việc với các khu vực hình chữ nhật hình ảnh (<C-V>): nó puts " ("") "xung quanh mỗi khối dòng

+1

Đóng, nhưng không hoàn toàn. Nếu ký tự cuối cùng trong lựa chọn trực quan là ký tự cuối cùng trên dòng, con trỏ di chuột qua ký tự trước lựa chọn trực quan. Kết quả là, bằng cách sử dụng chèn ("i") kết quả trong văn bản ngoặc được chèn một ký tự xa hơn dự định. – duckworthd

+0

@duckworthd, xấu của tôi - bạn hoàn toàn chính xác. Vui lòng xem cập nhật của tôi ... – JJoao

70

Có hai dấu ngoặc built-in có liên quan lưu trữ vị trí của đầu tiên và ký tự cuối cùng của lựa chọn hình ảnh cuối cùng trong bộ đệm hiện tại. Để di chuyển con trỏ đến vị trí của những điểm này, hãy sử dụng các lệnh `<`> tương ứng. (Xem :help `>, :help `<.)

+4

Đây chính xác là câu trả lời mà _I_ đang tìm kiếm. @duckworthd - bạn nên cân nhắc việc nhấp vào chấp nhận :-) –

+0

Nhưng làm thế nào để bạn giữ lựa chọn giống nhau? – Adrian

+17

@Adrian: Ý của bạn là không rời khỏi chế độ Visual? Nếu vậy, bạn có thể sử dụng lệnh 'o'. –

19

nếu bạn chỉ muốn bao quanh một vùng chọn hình ảnh có đã làm việc được thực hiện, cụ thể là do tim Đức Giáo Hoàng, người đã viết this plugin gọi surround. Nó bao quanh các từ hoặc lựa chọn trực quan với các dấu phân cách theo ý thích của bạn.

chọn lựa chọn hình ảnh của bạn, nói i like vim nhấn S) để có được (i like vim) hoặc S( để có được (i like vim), để thay đổi điều này để [i like vim] loại cs] (thay đổi xung quanh) và xóa ds] để có được i like vim cuối cùng.

10

Nếu bạn không thể sử dụng Surrond.vim, đây là một cách để làm điều đó:

  1. Bạn lựa chọn hình ảnh của bạn với v hoặc V.
  2. Hãy ra khỏi nó với <Esc>.
  3. Nhập `>a)<Esc> để chèn dấu ngoặc đơn đóng sau ký tự cuối cùng của lựa chọn.
  4. Nhập `<i(<Esc> để chèn dấu ngoặc đơn mở trước ký tự đầu tiên của lựa chọn.
34

Trong khi bạn đang ở trong Visual Selection nhấp chuột o. Nó sẽ thay đổi vị trí của con trỏ để kết thúc lựa chọn khác. Sau đó, O để quay lại.

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