2012-01-25 12 views

Odpowiedz

8

Pozwolę sobie zaproponować następujące wdrożenie.

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 

Jeśli jest gwarantowana przez notacji zakres, który nie ma spacji wokół numerów, drugi zestawienie ExpandRange() można uprościć za pomocą wyboru funkcji split(),

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

Należy zauważyć, że tekst oznaczenie zakresu jest umieszczane w rejestrze bez nazwy. Jeśli lepiej jest pozostawić rejestr nietknięty, zmień ExpandRange(), aby wcześniej zapisać jego stan i przywrócić go później.

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 
Powiązane problemy