Di chuyển con trỏ x dòng từ vị trí hiện tại trong vi / vim


80

Có cách nào để di chuyển con trỏ một lượng dòng tương đối trong vi / vim không? Giả sử bạn có con trỏ 10 dòng dưới một khối mã mà bạn muốn xóa. Nếu bạn có các số dòng được hiển thị theo thứ tự tương đối, sẽ rất tuyệt nếu có một "lệnh nhảy lên 10 dòng" sẽ đưa bạn đến đó.

Hoặc có lẽ tốt hơn nên hiển thị số dòng tuyệt đối và đi xgg với x là số dòng?


Nếu bạn phải lặp lại nó nhiều lần: superuser.com/questions/429917/...
toliveira

Câu trả lời:


122

Vâng, tất nhiên là có một cách. jkdi chuyển xuống và lên một dòng, như vậy 10j10kdi chuyển xuống và lên mười dòng. Bạn có thể lặp lại bất kỳ chuyển động nào bằng cách đặt một số trước chuyển động đó.

Bạn cũng có thể muốn set relativenumbernếu đây là điều bạn làm nhiều - nó sẽ giúp bạn tiết kiệm việc đếm bằng cách in số dòng liên quan đến dòng hiện tại, thay vì số tuyệt đối.


Cảm ơn! Tôi nên tìm ra số lượng sẽ áp dụng cho các lệnh di chuyển. Bạn đã làm nên ngày của tôi!

1
Vì Vim 7.4, có thể xem cả số dòng tương đối và tuyệt đối cùng một lúc bằng cách thêm phần sau vào .vimrc set relativenumberset number. Thao tác này sẽ cung cấp số dòng tương đối với số dòng tuyệt đối cho dòng mà con trỏ của bạn đang ở trên.
Isaac Gregson,

2
Bạn cũng có thể di chuyển xuống một số dòng bằng cách chỉ cần gõ số theo sau enter(đối với số dòng tuyệt đối, chỉ cần đặt trước nó bằng dấu hai chấm). Nếu bạn đang sử dụng để jkvà một bố trí bàn phím thông thường, có thể không quá hữu ích, nhưng như một mũi tên sử dụng sử dụng Colemak, enterlà dễ dàng hơn để đạt được so với Colemak j(QWERTY ykey)
SnoringFrog

49

Di chuyển 10 dòng lên và xuống có thể không phù hợp với nhiệm vụ của bạn cũng như các tùy chọn khác. Xem xét các chuyển động khác:

Ctrlf, Ctrlbtrang chuyển tiếp và quay lại.

}, {tiến và lùi một đoạn.

Bạn có thể viết các quy tắc trong vimrc của mình để liên kết 10jvới một khóa, chẳng hạn Jnhư di chuyển xuống 10 dòng bằng cách thêm dòng sau vào tệp vimrc của bạn: map <S-j> 10j

Tuy nhiên, bạn đang ghi đè lệnh hữu ích hiện có J(nối hai dòng). Tìm một tổ hợp phím chưa sử dụng được định vị tốt cho 10j/ 10kcó thể khó khăn, vì vậy tôi khuyên bạn nên sử dụng các chuyển động hiện có mà tôi đã đề cập.

Bạn cũng có thể muốn biết rằng bạn có thể chuyển ngược lại từ mà bạn nhìn thấy bằng cách thực hiện: ?somewordvà chuyển tiếp đến một từ bạn thấy bằng cách thực hiện /someword. Việc này sẽ nhanh hơn việc cố gắng di chuyển lên / xuống 10 dòng và sau đó định vị lại con trỏ của bạn đến vị trí chính xác. Nếu bạn không thể nghĩ ra một chuỗi tìm kiếm đơn giản cho dòng được đề cập, bạn luôn có thể chuyển đến số dòng như bạn đã nói ( xgg).


Trang lên và xuống đã hoàn thành những gì tôi đang tìm kiếm!
jeremyjjbrown

1
Tôi sử dụng ctrl-f và ctrl-b mọi lúc nhưng bị bỏ qua {,} có thể là chi tiết tốt nhất để chỉnh sửa mã! Cảm ơn!
Thomson Comer

Biết chính xác một đoạn thẳng cần di chuyển là điều gần như không thể. {và} là tùy chọn ưu tiên của tôi.
Andrejs

12

Tôi đang bối rối với vim và tôi nhận thấy -bạn di chuyển lên trên và +di chuyển bạn xuống, vì vậy bạn có thể:

10-

hoặc bạn có thể sử dụng kvì bạn đang rất có thể sử dụng để hjk ldi chuyển con trỏ.


3
Để di chuyển về phía trước, enterhoạt động giống như +sau một số lần, và dễ dàng hơn để đạt được hầu hết thời gian
SnoringFrog

@SnoringFrog Vâng, nhưng điều này chỉ để có thể có một số mối quan hệ giữa lên và xuống; Tôi không có ý cho bất cứ ai thực sự di chuyển lên xuống như thế này, bởi vì dù sao thì hjkl cũng sẽ là nhanh nhất.
Cilan
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.