如何规范化vim中文本块的空白?

如何规范化vim中文本块的空白?,vim,Vim,假设我有一个文件(换行符标记为^n): 是否有一个简单的命令将空格回填到块的最右边(可能使用视觉选择);我经常看到有关删除前导空格的问题,但在本例中,我希望前导空格的规格设置为块中最长的非空格字符,如下所示: aaaa ^n bbbb^n cccc ^n 也许最简单的方法就是 set virtualedit=all 转到要选择的块的左上角。使用分块可视选

假设我有一个文件(换行符标记为^n):

是否有一个简单的命令将空格回填到块的最右边(可能使用视觉选择);我经常看到有关删除前导空格的问题,但在本例中,我希望前导空格的规格设置为块中最长的非空格字符,如下所示:

aaaa                        ^n
                        bbbb^n
cccc                        ^n

也许最简单的方法就是

set virtualedit=all
转到要选择的块的左上角。使用分块可视选择(
)并选择所需的行。然后点击
$
将可视块扩展到行的末尾

然后用
y

然后键入
gvp
以越过您将行拉回到其上的内容。(
gv
重新选择最后一个可视块)。完成此操作后,所有线将延伸至最长线的长度+1

这是有效的原因。当您使用虚拟编辑时,视觉选择是将每一行延伸到最长的长度,将其放入寄存器


这将在末端添加一个额外的空间,可以使用
:%s/$/

轻松修复。您可以在单个
:substitute
中完成此操作,尽管它确实涉及到一些问题:

:'<,'>s/$/\=repeat(' ', max(map(getline(line("'<"),line("'>")),'strdisplaywidth(v:val)'))-strdisplaywidth(getline('.')))/

:“+1出色使用
'virtualedit=all'
。我发现这非常有效,只是在每行末尾都增加了一个额外的空间。使用
轻松修复:%s/$/
@PeterRincker是的,我也注意到了这一点,并正在寻找一个设置来消除它。我想这是因为
$
是如何工作的。它总是超过行的最后一个字符。我希望视觉块模式有一个
g
。在我看来,这不是最好的解决方案,但我对这个命令有点敬畏。对于一次工作来说,这有点太多了。但是,如果需要经常执行此操作,可以将其编写为函数或映射,以使此类操作非常容易。只需目视选择,然后按
ABC
+1@Kent glts编写了一个函数和映射,但随后将其删除。如果您想查看编辑历史记录,请查看。一个有趣的、有点相关的问题(和答案)位于。另请参阅我的问题:获取历史记录。
:'<,'>s/$/\=repeat(' ', max(map(getline(line("'<"),line("'>")),'strdisplaywidth(v:val)'))-strdisplaywidth(getline('.')))/