我经常使用具有可变量的空格作为文字分隔符的文本文件(文本处理器像Word这样做,以公平地分配空格量,由于字母在某些字体中不同的大小,他们把这个恼人的可变量的空间,即使当保存为纯文本)。
我想自动化的过程中,用单个空格替换这些可变长度的空白字符序列。我怀疑一个正则表达式可以做到这一点,但在段落的开头也有空格(通常是四个,但不总是),我想让它不变,所以基本上我的正则表达式也不应该触及领先的空白和这个增加了复杂性。
我使用vim,所以在vim regex方言regex将对我非常有用,如果这是可行的。
我目前的进展如下:
:%s/ \+/ /g
但它不能正常工作。
我也考虑写一个vim脚本,可以解析文本行一个一个,处理每一行char by char和跳过第一个后的空格,但我有一种感觉,这将是overkill。
为了实用主义的利益,我倾向于把它作为一个三个阶段的过程:
:g/^ /s//XYZZYPARA/g :g/ \+/s// /g :g/^XYZZYPARA/s// /g
我不怀疑,可能有一个更好的方式(可能使用宏或甚至一个纯正的正则表达式方式),但我通常发现这是工作,当我在匆忙。当然,如果你有从XYZZYPARA开始的行,你可能要调整字符串:-)
这是足够好转:
This is a new paragraph spanning two lines. And so is this but on one line.
进入:
This is a new paragraph spanning two lines. And so is this but on one line.
Aside: If you’re wondering why I use
:g
instead of:s
,that’s just habit mostly.:g
can do everything:s
can and so much more. It’s actually a way to execute an arbitrary command on selected lines. The command to execute happens to bes
in this case so there’s no real difference but,if you want to become avi
power user,you should look into:g
at some point.