Vim: cách nhanh hơn để chọn các khối văn bản trong chế độ trực quan


189

Tôi đã sử dụng vim khá lâu và nhận thấy rằng việc chọn các khối văn bản ở chế độ trực quan cũng đơn giản như SHIFT+ Vvà di chuyển phím mũi tên lên hoặc xuống từng dòng cho đến khi tôi đến cuối khối văn bản mà tôi muốn chọn.

Câu hỏi của tôi là - có cách nào nhanh hơn trong chế độ trực quan để chọn một khối văn bản ví dụ bằng SHIFT+ Vtheo sau bằng cách chỉ định số dòng mà tôi muốn lựa chọn dừng lại? ( :35ví dụ, thông qua 35, là số dòng tôi muốn chọn - điều này rõ ràng không hoạt động vì vậy câu hỏi của tôi là tìm hiểu làm thế nào nếu một cái gì đó tương tự có thể được thực hiện ...)


3
+1 Câu hỏi hay vì tôi thường thấy mình làm điều gì đó như thế này thường xuyên. Tôi tự hỏi nếu có lẽ đây không phải là nơi bắt đầu sử dụng sử dụng v%hoặc v/patternhay cái gì khác?
user786653

9
vip chọn đoạn bên trong vis chọn câu bên trong.
SergioAraujo

27
V35Gsẽ trực quan chọn từ dòng hiện tại đến dòng 35, V10jhoặc cũng V10ksẽ chọn trực quan 10 dòng tiếp theo hoặc trước đó
Stephan

1
@Stephan, đó chỉ là những gì tôi đang tìm kiếm. Cảm ơn!!
hét lên

để chọn dòng tôi sử dụng phím tắt : nnoremap <Space> V. Khi ở chế độ dòng trực quan, chỉ cần nhấp chuột phải để xác định lựa chọn (ít nhất là trên linux là như vậy). Dù sao, hiệu quả hơn chỉ với bàn phím.
Mikhail V

Câu trả lời:


211

Ngoài những gì người khác đã nói, bạn cũng có thể mở rộng lựa chọn của mình bằng cách sử dụng các tìm kiếm mẫu.

Ví dụ: v/foosẽ chọn từ vị trí hiện tại của bạn sang phiên bản tiếp theo của "foo." Ví dụ, nếu bạn thực sự muốn mở rộng sang phiên bản tiếp theo của "foo", trên dòng 35, chỉ cần nhấn nđể mở rộng lựa chọn sang phiên bản tiếp theo, v.v.

cập nhật

Tôi không thường xuyên làm điều đó, nhưng tôi biết rằng một số người sử dụng nhãn hiệu rộng rãi để thực hiện các lựa chọn trực quan. Ví dụ: nếu tôi ở dòng 5 và tôi muốn chọn dòng 35, tôi có thể nhấn mađể đặt dấu atrên dòng 5, sau đó :35chuyển sang dòng 35. Shift+ vđể vào chế độ trực quan theo chiều dọc và cuối cùng `achọn trở lại để đánh dấu a.


21
Nếu bạn cần bao gồm các mẫu bạn có thể sử dụng v/foo/e. Chữ eviết tắt của "kết thúc" của mẫu phù hợp.
Peter Rincker

6
Và bạn có thể sửa đổi từ dòng đó bằng offset: V / foo / + 5 hoặc V / foo / -5 (Tôi đang sử dụng chế độ trực quan theo đường thẳng như tác giả).
bheeshmar

Bạn sẽ làm gì nếu bạn muốn chọn phạm vi văn bản phù hợp với tìm kiếm của bạn; tức là: tìm và chọn (toàn bộ từ) cụm từ tìm kiếm của bạn?
Công viên Daniel

5
@DanielPark Để chọn từ hiện tại, sử dụng v i w. Nếu bạn muốn chọn khoảng trắng không liền kề hiện tại, hãy sử dụng v i Shift+ w. Sự khác biệt sẽ là khi dấu mũ ở đây MyCla|ss.Method, combo đầu tiên sẽ chọn MyClassvà thứ hai sẽ chọn toàn bộ.
Jay

1
Cảm ơn. Tìm thấy rằng cũng sử dụng v i w scho phép bạn thực hiện một hoạt động "thay thế" một cách hiệu quả.
Công viên Daniel

113
G                       Goto line [count], default last line, on the first
                        non-blank character linewise.  If 'startofline' not
                        set, keep the same column.
                        G is a one of jump-motions.

V35G đạt được những gì bạn muốn


89

Vim là một ngôn ngữ. Để thực sự hiểu Vim, bạn phải biết ngôn ngữ. Nhiều lệnh là động từ và vim cũng có các đối tượng và giới từ.

V100G
V100gg

Điều này có nghĩa là "chọn dòng hiện tại lên đến và bao gồm dòng 100."

Các đối tượng văn bản là nơi có rất nhiều sức mạnh. Họ giới thiệu nhiều đối tượng hơn với giới từ.

Vap

Điều này có nghĩa là "chọn xung quanh đoạn hiện tại", nghĩa là chọn đoạn hiện tại và dòng trống theo sau nó.

V2ap

Điều này có nghĩa là "chọn xung quanh đoạn hiện tại và đoạn tiếp theo."

}V-2ap

Điều này có nghĩa là "đi đến cuối đoạn hiện tại và sau đó chọn nó một cách trực quan và đoạn trước."

Hiểu Vim như một ngôn ngữ sẽ giúp bạn đạt được số dặm tốt nhất.

Sau khi bạn đã chọn xuống, sau đó bạn có thể kết hợp với các lệnh khác:

Vapd

Với lệnh trên, bạn có thể chọn xung quanh một đoạn và xóa nó. Thay đổi dthành một yđể sao chép hoặc thành một cđể thay đổi hoặc pđể dán lên.

Một khi bạn hiểu được cách tất cả các lệnh này hoạt động cùng nhau, thì cuối cùng bạn sẽ không cần phải chọn bất cứ thứ gì một cách trực quan. Thay vì chọn trực quan và sau đó xóa một đoạn, bạn chỉ có thể xóa đoạn đó bằng daplệnh.


} V-2ap Sử dụng -2 thực sự thông minh.
Ambareesh

40

v35G sẽ chọn mọi thứ từ con trỏ đến dòng 35.

vđưa bạn vào chế độ chọn, 35chỉ định số dòng bạn muốn Gđến.

Bạn cũng có thể sử dụng v}cái sẽ chọn mọi thứ cho đến đầu đoạn tiếp theo.


16

Để chọn số lượng dòng:

shift + v 9j - chọn 10 dòng


2
Đối với phạm vi nhỏ, điều này là tốt, đặc biệt là khi kết hợp với:set rnu
Peter Rincker

9

Shift+V n j hoặc là Shift+V n k

Điều này chọn dòng hiện tại và dòng tiếp theo / trước n. Tôi thấy nó rất hữu ích.


Đây là một cách đơn giản tôi đang tìm kiếm. Cảm ơn
Arsal

6

v 35 j

văn bản được thêm tối thiểu 30 ký tự


6

v%

sẽ chọn toàn bộ khối.

Chơi với:

v}, vp, vsVv

Xem trợ giúp:

:help text-objects

trong đó liệt kê các cách khác nhau để chọn chữ cái, từ, câu, đoạn văn, khối, v.v.



4

Bạn có thể nhấn vi}để chọn khối được bao quanh bằng {}dấu ngoặc nơi con trỏ của bạn hiện đang nằm.

Nó không thực sự quan trọng khi bạn ở trong khối đó (chỉ cần chắc chắn rằng bạn đang ở ngoài cùng). Ngoài ra, bạn có thể thay đổi {thành bất cứ điều gì có một cặp như )hoặc ].


3

Bạn luôn có thể sử dụng các số trước đó để lặp lại các hành động:

  • Trong chế độ trực quan, gõ 35 và con trỏ sẽ di chuyển xuống 35 lần, chọn 35 dòng tiếp theo
  • Ở chế độ bình thường:
    • xóa 35 dòng 35dd
    • dán 35 lần 35p
    • hoàn tác 35 thay đổi 35u
    • Vân vân.

2

đơn giản chỉ cần nhấn Shift v line number gg

ví dụ: dòng hiện tại của bạn đến dòng 41 Chỉ cần nhấn Shift v 41 gg


1

} có nghĩa là di chuyển con trỏ đến đoạn tiếp theo. vì vậy, sử dụng v}để chọn toàn bộ đoạn văn.


0

Để chọn tất cả trong hình ảnh: Nhập Esc để chắc chắn rằng bạn đang ở chế độ bình thường

:0 

gõ ENTER để bắt đầu tập tin

vG

Bạn có thể sử dụng ggở chế độ bình thường để đi đến dòng đầu tiên.
huangzonghao

0

Nó có thể có ích để biết:

Ví dụ, để chọn cùng một dòng sản phẩm, 1v bạn nên thực hiện một số sửa đổi để có thể sử dụng 1v, theo chiều dọc hoặc theo chiều dọc.

Hôm nay tôi thấy mẹo tuyệt vời này từ đây :

 :5mark < | 10mark > | normal gvV
 :5mark < | 10mark > | normal gv

Bạn cũng có thể đặt lại ranh giới khối hình ảnh bằng cách này:

m< .......... sets the visual mode start point
m> .......... sets the visual mode end point

0

Tôi sử dụng điều này với nếp gấp ở chế độ thụt lề:

v mở chế độ Visual bất cứ nơi nào trên khối

zaza toogle nó hai lần

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.