2011-02-06 35 views
47

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

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

+0

Nếu bạn phải lặp lại nhiều lần: https://superuser.com/questions/429917/repeat-last-normal-mode-command-including-moves-in-vim – toliveira

Trả lời

65

Đúng, tất nhiên là có cách. jk di chuyển xuống và lên một dòng, do đó, 10j10k di 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 đó.

Bạn cũng có thể muốn set relativenumber nếu đây là điều bạn làm rất nhiều - nó sẽ giúp bạn tiết kiệm bằng cách in số dòng tương ứng với dòng hiện tại, thay vì số tuyệt đối.

+0

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 quá. Bạn đã làm cho ngày của tôi! –

+0

Vì Vim 7.4 có thể thấy cả hai 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 relativenumber' và' set number'. Điều này sẽ cung cấp cho số dòng tương đối với một số dòng tuyệt đối cho dòng con trỏ của bạn. –

+1

Bạn cũng có thể di chuyển xuống một số dòng đơn giản bằng cách nhập số theo sau là 'enter' (cho số dòng tuyệt đối, chỉ cần mở đầu bằng dấu hai chấm).Nếu bạn đã quen với 'j' và' k' và bố trí bàn phím thông thường, điều đó có thể không hữu ích lắm, nhưng với tư cách là người dùng sử dụng mũi tên Colemak, 'enter' dễ tiếp cận hơn so với Colemak' j' (Phím QWERTY 'y') – SnoringFrog

34

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

Ctrl+f, Ctrl+b Trang về phía trước và sau.

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

Bạn có thể viết các quy tắc trong vimrc của bạn để ràng buộc 10j để một chìa khóa, nói J để di chuyển xuống 10 dòng bằng cách thêm dòng sau vào tập tin vimrc của bạn: map <S-j> 10j

Tuy nhiên bạn muốn được ghi đè hữu ích hiện có J lệnh (tham gia hai dòng). Việc tìm một tổ hợp phím không được sử dụng đúng vị trí cho 10j/10k có 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ể di chuyển ngược về một từ mà bạn thấy bằng cách thực hiện: ?someword và chuyển tiếp đến một từ mà bạn thấy bằng cách thực hiện /someword. Đây sẽ là nhanh hơn so với 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ể đi đến số dòng như bạn đã nói (xgg).

+0

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

+0

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

+0

Biết chính xác số lượng đường cần di chuyển gần như không thể. {và} là tùy chọn ưa thích của tôi. – Andrejs

8

tôi đã rối tung với vim và tôi nhận thấy - di chuyển bạn lên và + di chuyển bạn xuống, do đó bạn có thể

10- 

hoặc bạn có thể sử dụng k vì bạn đang rất có thể sử dụng để hjkl di chuyển con trỏ.

+1

Để di chuyển về phía trước, 'enter' hoạt động giống như' + 'sau một số, và dễ dàng tiếp cận hầu hết thời gian – SnoringFrog

+0

@SnoringFrog Vâng, nhưng đây chỉ là để có thể có một số mối quan hệ giữa lên và xuống; Tôi không có ý định để bất cứ ai thực sự di chuyển lên và xuống như thế này, bởi vì hjkl sẽ là nhanh nhất anyway. – Cilan

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