每隔一段时间,我发现自己在Vim中绘制简单的ASCII图:
+-----------+
... --> | foo | --> ...
+-----------+
大部分时间都花在确保文本居中的地方:
+-----------+
... --> | foo | --> ...
+-----------+
不幸的是,到目前为止我一直无法自动化这个过程:我想在可视模式中选择框(即“foo”加上前导/尾随空格),然后输入一个命令来集中选择(Vim的内置 - 在:center
中适用于整行,这对我没有帮助。)
这样的事情是否存在?如果没有,我将如何为这个特定的操作创建一个简单的脚本?
答案 0 :(得分:7)
有一个调整过的功能,您可以根据自己的需要进行测试。
请注意
|
)。如果它不能完全满足您的需求,请修改该功能。
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
这就像: