vim - 在可视 block 中向右对齐

标签 vim alignment

我想知道如何在不更改之前的文本和 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/

相关文章:

vim - 如何减少vim的启动时间?

search - 如何使用 VIM 在我的项目的所有文件中搜索?

vim - 增加Markdown文件中的标题级别

android - 在水平线性布局内对齐按钮

html - 问题是让导航栏中的不同元素垂直对齐

mysql - 我可以在 Vim 中使用 MySQL 的完成散列吗?

objective-c - Cocoa osx NSCombobox 对齐项目中心

WPF StackPanel 内容垂直对齐

html - 如何将导航栏和 slider 对齐

linux - gvim AnsiEsc 插件