5
我想自動選擇一個可視化選定的文本塊,如 51-100
,並將其展開爲51,52,53,...,99,100
。如何將範圍擴展到vimscript的列表中?
有沒有一種簡單的方法來做到這一點在vimscript?
我想自動選擇一個可視化選定的文本塊,如 51-100
,並將其展開爲51,52,53,...,99,100
。如何將範圍擴展到vimscript的列表中?
有沒有一種簡單的方法來做到這一點在vimscript?
讓我提出以下實現。
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