我想知道如何在不更改之前的文本和 block 的情况下在可视 block 中右对齐。
我以前用过这段代码:
:<C-U>'<,'>s/\%V\(.\{-}\)\(\s\{-}\)\%(\%V\@!\|$\)/\2\1/
但是我注意到当视觉 block 后面只有空格时它不起作用。 (为了使上面的代码工作,视觉 block 之后必须有文本)
有没有办法在可视 block 中将文本右对齐,无论 block 后面写什么?
例子:
text before +align text text after
text before align text text after
text before align text text after
text before align text+ text after
我想做的是从 +
到 +
选择一段文本(见上面的例子)
并将其右对齐。输出必须是:
text before align text text after
text before align text text after
text before align text text after
text before align text text after
上面的代码可以完成工作,但如果在每一行的 align text
之后都没有写任何东西,它就不起作用。
最佳答案
为了解决正确处理所有极端情况的问题,我会使用 以下函数。
function! RightAlignVisual() range
let lim = [virtcol("'<"), virtcol("'>")]
let [l, r] = [min(lim), max(lim)]
exe "'<,'>" 's/\%'.l.'v.*\%<'.(r+1).'v./\=StrPadLeft(submatch(0),r-l+1)'
endfunction
function! StrPadLeft(s, w)
let s = substitute(a:s, '^\s\+\|\s\+$', '', 'g')
return repeat(' ', a:w - strwidth(s)) . s
endfunction
关于vim - 在可视 block 中向右对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9773230/