每隔一段时间,我发现自己在Vim中绘制简单的ASCII图:
        +-----------+
... --> | foo       | --> ...
        +-----------+
大部分时间都花在确保文本居中的上面:
        +-----------+
... --> |    foo    | --> ...
        +-----------+
不幸的是,到目前为止我一直无法自动完成这个过程:我想在视觉模式中选择框(即"foo"加上前导/尾随空格),然后输入一个命令来集中选择(Vim的内置:center适用于整条线,这对我没有帮助.)
这样的事情已经存在吗?如果没有,我将如何为此特定操作创建一个简单的脚本?
有一个调整功能,你可以测试你的需求.
注意
|也不应选择边界字符(例如,在您的示例中).如果它不能完全满足您的需求,请修改该功能.
function! GetVisual()
    try
        let v_save = @v
        normal! gv"vy
        return @v
    finally
        let @v = v_save
    endtry
endfunction
fun! CenterMe()
    let v = GetVisual()
    "let l = getline('.')
    let lre = '^\zs\s*\ze\S'
    let rre = '\s*$'
    let sp= matchstr(v,lre)
    let sp .= matchstr(v,rre)
    let ln=len(sp)
    let v = substitute(v,lre,sp[:ln/2-1],'')
    let v = substitute(v,rre,sp[ln/2:],'')
    let ve_save = &virtualedit
    let v_save = @v
    let &virtualedit = 'all'
    call setreg('v', v,visualmode())
    normal! gvx"vP
    let @v = v_save
    let &virtualedit = ve_save
endf
这就像:
