Chciałbym automatycznie wziąć wizualnie wybrany blok tekstu, taki jak 51-100
, i powinien on zostać rozszerzony do 51,52,53,...,99,100
.Jak rozszerzyć zakres na listę w vimscript?
Czy jest prosty sposób na zrobienie tego w vimscript?
Chciałbym automatycznie wziąć wizualnie wybrany blok tekstu, taki jak 51-100
, i powinien on zostać rozszerzony do 51,52,53,...,99,100
.Jak rozszerzyć zakres na listę w vimscript?
Czy jest prosty sposób na zrobienie tego w vimscript?
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