2012-01-25 29 views

Trả lời

8

Hãy để tôi đề xuất triển khai sau.

vnoremap <silent> <leader># :<c-u>call ExpandRange()<cr> 
function! ExpandRange() 
    norm! gvy 
    let n = matchlist(@", '\(\d\+\)\s*-\s*\(\d\+\)')[1:2] 
    if len(n) != 2 || +n[0] > +n[1] 
     return 
    end 
    exe 'norm! gvc' . join(range(n[0], n[1]), ',') 
endfunction 

Nếu nó được đảm bảo bằng các ký hiệu phạm vi đó không có khoảng trắng xung quanh số, báo cáo kết quả thứ hai của ExpandRange() có thể được đơn giản hóa bằng cách sử dụng các split() chức năng,

let n = split(@", '-') 

Lưu ý rằng các văn bản biểu thị một phạm vi được đưa vào thanh ghi chưa đặt tên. Nếu nó thích hợp hơn là để lại thanh ghi bị ảnh hưởng, hãy sửa đổi ExpandRange() để lưu trước và sau đó khôi phục trạng thái trước đó .

function! ExpandRange() 
    let [qr, qt] = [getreg('"'), getregtype('"')] 
    norm! gvy 
    let n = matchlist(@", '\(\d\+\)\s*-\s*\(\d\+\)')[1:2] 
    call setreg('"', qr, qt) 
    if len(n) != 2 || +n[0] > +n[1] 
     return 
    end 
    exe 'norm! gv"_c' . join(range(n[0], n[1]), ',') 
endfunction 
Các vấn đề liên quan