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
posted @ 2021-08-18 15:39  火冷  阅读(173)  评论(0编辑  收藏  举报