Làm cách nào để sử dụng số dòng tương đối trong chế độ dòng lệnh?


16

Gần đây tôi đã học được từ Thực hành Vim một cách để sao chép hoặc di chuyển khối dòng mà không phải di chuyển con trỏ từ vị trí hiện tại. Điều này được thực hiện trong chế độ dòng lệnh. ví dụ

:123,133m.  # moves lines from 123 to 133 below the cursor position.

Trong khi tôi thích nó, thật khó để gõ các số dòng dài, đặc biệt là khi tệp có quá nhiều dòng.

Đôi khi, các dòng để di chuyển tương đối gần con trỏ (nhưng tôi không muốn di chuyển con trỏ của mình, yank, quay lại nơi tôi đang ở, dán!). Sẽ thật tuyệt nếu tôi có thể sử dụng các số tương đối, tương tự như cách chúng ta làm trong chế độ bình thường. Nó giống như nói

di chuyển 5 dòng là 10 dòng trên dòng hiện tại đến đây

Tóm lại, làm thế nào để sử dụng số tương đối trong chế độ dòng lệnh (tương tự chế độ bình thường)?

Câu trả lời:


23

Giả sử các dòng của bạn trải dài từ 15 đến 10 dòng trên dòng hiện tại, bạn có thể đạt được những gì bạn yêu cầu bằng cách sử dụng số dòng tương đối:

:-10,-15m.

Thật không may khi chỉ định một phạm vi ngược, Vim yêu cầu bạn xác nhận nếu đó là những gì bạn thực sự muốn. Để tránh bước xác nhận, bạn có thể nhập silenttrước lệnh của mình hoặc chỉ định phạm vi chuyển tiếp:

:-15,-10m.

Như bạn có thể mong đợi +có thể được sử dụng để tham khảo các dòng bên dưới dòng hiện tại.

Trợ giúp chi tiết có thể được tìm thấy với:

:help cmdline-ranges

1
Nhưng tôi chưa bao giờ sử dụng tính năng này. Tôi làm 15k d5j 10j P.
joeytwiddle

Sự khác biệt là 15k, 5j hoạt động ở chế độ lệnh và câu được giải thích trong câu trả lời là ở chế độ chèn. Vì vậy, dựa trên chế độ, chúng ta có thể chọn một cái thích hợp. Các lệnh trong chế độ chèn thường là tiêu chí lựa chọn để chạy các lệnh khác.
Soundararajan

12

Bạn có thể sử dụng số cứng trong phạm vi của mình:

:200,300command

Hoặc số tương đối:

:-27,+46command

Hoặc đánh dấu bằng tay:

:'a,'bcommand

Hoặc đánh dấu tự động:

:'[,'>command

Hoặc tìm kiếm:

:?foo?,/bar/command

Hoặc các phím tắt:

:.,$command

Hoặc bất kỳ sự kết hợp của các thủ thuật trên:

:?foo?,+46command
:'a,$command
...

3

Bạn có thể sử dụng địa chỉ tương đối (ví dụ .-10,.+3) với bất kỳ lệnh Ex, cp. :help :range.

Ngoài ra, hãy xem plugin LineJuggler của tôi ; nó cung cấp một số ánh xạ ngắn để di chuyển các đường xung quanh hoặc sao chép chúng và tất cả các ánh xạ đó có độ lệch dòng tương đối như [count].

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.