Vim:在选择中居中文本

时间:2014-10-01 09:08:44

标签: vim

每隔一段时间,我发现自己在Vim中绘制简单的ASCII图:

        +-----------+
... --> | foo       | --> ...
        +-----------+

大部分时间都花在确保文本居中的地方:

        +-----------+
... --> |    foo    | --> ...
        +-----------+

不幸的是,到目前为止我一直无法自动化这个过程:我想在可视模式中选择框(即“foo”加上前导/尾随空格),然后输入一个命令来集中选择(Vim的内置 - 在:center中适用于整行,这对我没有帮助。)

这样的事情是否存在?如果没有,我将如何为这个特定的操作创建一个简单的脚本?

1 个答案:

答案 0 :(得分:7)

有一个调整过的功能,您可以根据自己的需要进行测试。

请注意

  • 这仅适用于单行选择。
  • 也不应选择边框字符(例如,例如|)。
  • 仅适用于视觉选择
  • 如果你愿意,可以创建v-mapping。
  • 如果它不能完全满足您的需求,请修改该功能。

    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
    

这就像:

enter image description here