Lặp lại n lần ánh xạ bắt đầu bằng số đếm


7

Tôi đã tạo ánh xạ sau:

:map <F8> 3w

Khi tôi nhấn 2<F8>, tôi nghĩ rằng nó sẽ di chuyển sáu từ ( 2*3w), nhưng nó di chuyển 23 từ. (Điều này đã được đề cập trong phần trợ giúp của trình soạn thảo vim)

Làm thế nào để ánh xạ nó hoạt động cho 6 di chuyển thay vì 23? Ngoài ra, vui lòng cho tôi biết nếu tính năng này được cố ý thực hiện để hoạt động như thế này cho ánh xạ?

(Trong tất cả các trường hợp khác, nó đơn giản như 2 * 3 thay vì quảng cáo 23, giống 2d3wnhư 6dw, cũng như d6w)

Câu trả lời:


5

Một giải pháp khác là sử dụng biến v:countnhư thế này:

nnoremap <F8> :<C-u>execute "normal! " . v:count1 * 3 . "w"<CR>

Xem :h v:count: Biến chứa số đếm được đưa ra cho lệnh chế độ bình thường cuối cùng và do đó có thể được sử dụng để lấy số đếm trước khi ánh xạ.

Ở đây, ánh xạ sử dụng v:count1giống như v:countnhưng mặc định là 0 khi không có số đếm nào được đưa ra.

Ánh xạ thực thi lệnh bình thường normal! Xwtrong đó Xđược thay thế bằng 3 lần số đếm được đưa ra trước khi ánh xạ.

Các <C-U>yêu cầu để loại bỏ các phạm vi dòng mà có được bao gồm khi gõ :sau một đếm.


Tất nhiên cũng có hành vi bạn quan sát là hoàn toàn bình thường: ánh xạ của bạn làm cho Vim hiểu F8như 3wkhi bạn gõ một cái gì đó trước Vim như không có cách nào để hiểu rằng bạn muốn nó tạo ra một phép nhân. Hãy nhớ rằng một chương trình không thể hiểu ý định của bạn nếu bạn không mô tả chúng với nó.


8

Bạn có thể sử dụng thanh ghi biểu thức cho việc này:

 :nnoremap <F8>  @='3w'<CR>

Điều này sẽ sử dụng thanh ghi biểu thức để tạo ánh xạ lặp lại mà bạn có thể đặt tiền tố với một số:

 2<F8> will move 6 words

Ánh xạ trong vim sẽ thay thế ý nghĩa của một phím / chuỗi phím được nhấn. Vì vậy khi bạn làm

:map <F8> 3w

2<F8>
23w

Vim sẽ chuyển đổi <F8>thành 3wvà những gì bạn thực hiện là 23w.

Mặt khác, khi sử dụng thanh ghi biểu thức, cuối cùng bạn sẽ thực hiện:

 2<F8>
 2@='3w'<CR>

Có nghĩa là, "2 lần, thực hiện nội dung của thanh ghi biểu thức".

Tôi đoán nếu nó đã được thực hiện có chủ ý là, với ý nghĩa của ánh xạ, đó là cách logic nên thực hiện.


Xin vui lòng cho tôi biết nếu điều này được thực hiện có chủ ý.
SibiCoder

Trả lời cập nhật.
nobe4


Ánh xạ chế độ bình thường không hoạt động mạnh mẽ vì nó hoạt động với một phạm vi. Nếu bạn cung cấp ánh xạ với số đếm ở dòng cuối cùng của tệp, bạn sẽ nhận được thông báo lỗi : E16: Invalid range.
jdhao
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.