vim:combine:g与使用范围的命令

时间:2010-08-17 12:43:04

标签: vim

我有一个由行组成的文本,其中一些看起来像这样:

  

测试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//范围内运行带范围的命令?或者是否还有其他简单(==无脚本)方法来完成相同的格式化任务?

3 个答案:

答案 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