我想自动选择一个视觉上选择的文本块,例如
51-100
,并将其扩展为51,52,53,...,99,100
。
在vimscript中有一种简单的方法吗?
答案 0 :(得分:8)
让我提出以下实施方案。
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
如果范围表示法保证周围没有空格
数字,ExpandRange()
的第二个陈述可以通过使用简化
split()
函数,
let n = split(@", '-')
请注意,表示范围的文本将放入未命名的寄存器中。如果它
最好保持寄存器不变,修改ExpandRange()
以保存
它的状态事先并在之后恢复。
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