chọn một phạm vi dòng từ dòng lệnh


8

Tôi cần (trực quan) chọn một loạt các dòng từ dòng lệnh.

Ví dụ, lệnh sau :?^\s*for?+,/^\s*end/- pin tất cả các dòng chứa giữa a forend(cách độc quyền). Thay vì thực hiện thao tác in, tôi muốn chuyển sang chế độ trực quan với các dòng được tô sáng. Tôi đã tìm kiếm trong hướng dẫn nhưng tôi không thể tìm thấy một lệnh cũ như vậy.


Bạn có nghĩa là "độc quyền"?
Giàu

bạn đúng! Tôi đã chỉnh sửa câu hỏi
nicmus

Câu trả lời:


7

Ranh giới của lựa chọn chế độ trực quan được xác định bởi dấu <>.

Do đó, lệnh sau sẽ vào chế độ trực quan với các dòng 5 đến 10 (đã bao gồm) được chọn:

 :5mark < | 10mark > | normal gvV
  • :5mark < đặt bắt đầu lựa chọn thành dòng 5,
  • :10mark > đặt kết thúc của lựa chọn thành dòng 10,
  • gv vào chế độ trực quan với khu vực được xác định ở trên đã chọn,
  • V làm cho lựa chọn theo chiều dọc.

Bạn có thể chuyển bất kỳ phạm vi Vim nào vào :marklệnh: sau đây sẽ vào chế độ trực quan bằng cách sử dụng các biểu thức thông thường foobarđể xác định ranh giới của vùng chọn:

:execute search("foo") . "mark <" | execute search("bar") . "mark >" | normal gvV

Lệnh sau là phiên bản đơn giản hơn ở trên, nhưng phụ thuộc vào vị trí con trỏ:

/foo/mark < | /bar/mark > | normal gvV

Để giải thích thêm, xem:


Cảm ơn! Tôi đã giải quyết với:?^\s*for?+ mark < | /^\s*end/- mark > | norm gv
nicmus

@nicmus À đúng rồi, đơn giản hơn cho việc sử dụng cụ thể của bạn. Tôi đã cập nhật câu trả lời của mình.
Giàu

Chỉ vì lợi ích của bất kỳ độc giả nào trong tương lai có thể thắc mắc, +-trong bình luận của @ nicmus đang điều chỉnh các phạm vi để làm cho lựa chọn không bao gồm các dòng khớp với các biểu thức thông thường. (Xem :help range)
Giàu

Các .nhà điều hành nối thực sự ném tôi ra vì vậy đây là một ví dụ nếu ai đó cảm thấy giống nhau: :execute "l" . "s"sẽ cho kết quả tương tự như :ls.
toraritte
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.