我想知道如何在视觉块中向右对齐而不改变之前的文本和块。
我以前用过这个代码:
:<C-U>'<,'>s/\%V\(.\{-}\)\(\s\{-}\)\%(\%V\@!\|$\)/\2\1/
字符串
但是我注意到,当视觉块后面只有空格时,它不起作用。(为了使上面的代码起作用,视觉块后面必须有文本)
有没有办法在视觉块中将文本向右对齐,无论在块后面写什么?
范例:
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
之后没有写东西时,它就不起作用了。
4条答案
按热度按时间bvn4nwqk1#
为了解决正确处理所有角落情况的问题,我将使用以下函数。
字符串
4c8rllxm2#
我用这个。把光标放在文本前面,应该是右对齐的。运行
:Right
它是如何工作的:v0
直观选择从当前位置到行首的文本d
删除选定文本并放入缓冲区:right
对齐光标右侧的文本0
将光标移到第一列gv
直观选择我们之前删除的相同区域p
用删除的文本替换选定内容command! Right execute "normal v0d\<CR>:right\<CR>0gvp"
个zbwhf8kr3#
字符串
3xiyfsfu4#
你可以通过两个正则表达式来实现:
字符串
这只是将每个
+
替换为white-space
型
这只是3组匹配的列和空间之间,然后在更换只是改变空间从前面到后面所需的列对齐。