2012-11-12 15 views
5

Tôi đang cố gắng để Vim chuyển sang đánh số dòng tương đối khi tôi vào chế độ hình ảnh và quay lại đánh số tuyệt đối sau đó. Tôi đã nhận thấy có InsertEnterInsertLeave sự kiện autocmd, mà tôi có thể sử dụng như thế này:Làm cách nào để kích hoạt tính năng đánh số dòng tương đối trong (và chỉ trong) chế độ trực quan của Vim?

autocmd InsertEnter :set rnu 
autocmd InsertLeave :set nu 

Vấn đề là, tôi dường như không thể tìm thấy một tương đương cho chế độ trực quan.

Trả lời

5

Không có sự kiện nào như vậy cho chế độ trực quan (chưa được triển khai; bạn có thể gửi bản vá). Để nhập chế độ trực quan, bạn chỉ có thể ghi đè lên vài lệnh vào chế độ hình ảnh:

:nnoremap <silent> v v:<C-u>set nonu rnu<CR>gv 
:nnoremap <silent> V V:<C-u>set nonu rnu<CR>gv 
:nnoremap <silent> <C-v> <C-v>:<C-u>set nonu rnu<CR>gv 

Các khôi phục 'number' là khó khăn hơn, bởi vì ngoài việc thoát một cách rõ ràng qua <Esc>, có nhiều lệnh dừng chế độ trực quan. Tốt nhất tôi có thể nghĩ ra là kích hoạt trên CursorMoved:

vnoremap <Esc> <Esc>:set nu<CR> 
:autocmd CursorMoved * if mode() !~# "[vV\<C-v>]" | set nu | endif 
Các vấn đề liên quan