Vim一键智能垂直选择下方N行内容
简单的一个小功能,效果如图,列选中一项,然后 <leader>vv 即可
我的两个函数是写到vim的autoload文件夹下的,自行修改即可 !
选择内容后,后续我往往是添加序号,见 Vim中修改列模式的文字为ABCD或1234的递增序号
noremap <leader>vv :<C-u>call hy_map#vmap#VBelow()<cr>
"列模式选中下方n行
function! hy_map#vmap#VBelow() abort
let n = v:count ? v:count : hy_map#vmap#linesColBelow()
execute "normal! \<C-q>" . n . 'j'
endfunction
"获取当前光标下有/无值的行数(不含当前行,列选中模式选中用)
"当前为空,则往下找空,当前有值,则往下找有值
" NOTE tab 中间的符号 char2nr = 20837
function! hy_map#vmap#linesColBelow(...) abort
let l = a:0 ? a:1 : line('.')
let c = a:0>1 ? a:2 : col('.')
let n = 0
"NOTE 根据当前光标的字符定义 reg
let reg = strcharpart(strpart(getline('.'),c-1),0,1) =~ '\S' ? '\S' : '\s'
for i in range(l+1, line('$'))
if strcharpart(strpart(getline(i),c-1),0,1) =~ reg
let n += 1
else
" echom reg .' '. n
return n
endif
endfor
return n
endfunction