Mở rộng Vim Mappings để chạy N Times


3

Tôi muốn có thể nhập một cái gì đó như 'Ncom' ở chế độ bình thường sẽ nhận xét dòng N-1 hiện tại và tiếp theo. Một ánh xạ khóa mà tôi đã thực hiện để làm như vậy là :nmap com ^i#<ESC>j. Trên thực tế, điều này nhận xét dòng hiện tại, nhưng nó không hoạt động cho N dòng theo cách tương tự như các lệnh vim tích hợp. Tôi cần biết gì về vim sẽ giải thích khoảng cách giữa những gì tôi muốn xảy ra và những gì đang xảy ra? Ngoài ra, làm thế nào tôi có thể thực hiện chính xác những gì tôi muốn?

Câu trả lời:


2
:nnoremap com :normal! I#<CR>

Giải trình…

  • Ilà giống như ^inhưng tốt hơn. Nói chung, bạn nên làm như sau thay vì ^i#<Esc>:

    I#<Esc>
    

    Nhân tiện, tương tự cho $a.

  • :normallà một lệnh Ex cho phép bạn chạy một lệnh chế độ bình thường từ dòng lệnh. Nó được sử dụng như thế, theo sau <CR>:

    :normal! I#
    
  • Khi một lệnh chế độ bình thường được thêm vào một count: 6w, lệnh được thực thi 6 lần. Tuy nhiên, countkhông được truyền đến các lệnh tiếp theo: 6wifookhông thêm footrước mỗi 6 từ tiếp theo. Tùy thuộc vào lệnh, các quy tắc có thể khác nhau: tham khảo tài liệu nếu bạn không chắc chắn.

  • Khi một lệnh Ex được thêm vào phía trước với một count: 6:command, Vim sẽ tự động thêm một loạt bắt đầu từ dòng hiện tại và kết thúc với count-1dòng thứ bên dưới. Nếu bạn làm như vậy 6:normal! I#, lệnh sẽ trở thành:

    :.,.+5normal! I#
    

    có nghĩa là "chèn a #trước ký tự có thể in đầu tiên của dòng này và 5 dòng bên dưới".

  • Khi Vim bắt gặp một lệnh Ex trong ánh xạ, với a :, nó luôn thêm phạm vi liên quan. Đó là lý do tại sao tốt nhất nên sử dụng :normaltrong ánh xạ có nghĩa là được sử dụng trên nhiều dòng hoặc với a count.

Xem :help range:help :normal.


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.