微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

vim regex只用一个空格替换多个连续空格

我经常使用具有可变量的空格作为文字分隔符的文本文件(文本处理器像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 be s in this case so there’s no real difference but,if you want to become a vi power user,you should look into :g at some point.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐