我有一个由行组成的文本,其中一些看起来像这样:
测试1 测试测试
测试测试测试2 测试测试
测试测试
该行以A
(任意但唯一的字符串)开头,以空行结束。
我想从真实行中删除所有冗余换行符号(不影响其他行,不匹配/^A/
)并使行看起来像这样:
test1测试测试测试
test2测试测试测试
我/^A/
后,我可以使用:.,/^$/-2s/\n/ /
命令(范围.,/^$/-2
应用于:s///
)。遍历整个文件并手动完成它是相当普通的,因此我试图将其与:g/^A/
结合起来:
:g/^A/.,/^$/-2s/\n/ /
但是由于在:g//
之后的命令中产生了错误,因此无法识别范围。我也尝试过使用normal
- :g/^A/normal .,/^$/-2s/\n/ /
和:g/^A/exe 'normal .,/^$/-2s/\n/ /'
- 没有运气。
有没有办法在:g//
范围内运行带范围的命令?或者是否还有其他简单(==无脚本)方法来完成相同的格式化任务?
答案 0 :(得分:2)
试试这个。要输入^M
,请使用ctrl-v enter。
:g/^A/normal V/^$/^MkJ
答案 1 :(得分:0)
尝试这个:
:g/^A/normal JJ
答案 2 :(得分:0)
组合:g与带有范围的命令对我有用。 e.g。
:g/^A/.,/^$/-1join
与原始版本一样:
:g/^A/.,/^$/-2s/\n/ /
N.B。如果你想要简洁,那么join命令可以缩写为j,所以第一个版本变为:
:g/^A/.,/^$/-1j