代码之家  ›  专栏  ›  技术社区  ›  Dummy00001

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

vim
  •  2
  • Dummy00001  · 技术社区  · 14 年前

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

    测试1
    测试试验
    测试试验

    测试2
    测试试验
    测试试验

    行首是 A (任意但唯一的字符串)并以空行结尾。 我喜欢从 真实的 线条(不影响其他线条,不匹配 /^A/ )让线条看起来像这样:

    测试1测试测试测试测试

    测试2测试测试测试测试

    一旦我在 /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 回复  |  直到 11 年前
        1
  •  2
  •   a'r    14 年前

    试试这个。进入 ^M ,使用ctrl-v enter。

    :g/^A/normal V/^$/^MkJ
    
        2
  •  0
  •   Dave Kirby    14 年前

    结合:g和一个范围的命令对我来说很有用。例如

    :g/^A/.,/^$/-1join 
    

    原始版本也一样:

    :g/^A/.,/^$/-2s/\n/ /
    

    注意:如果您想要简洁,那么join命令可以缩写为j,因此第一个版本变为:

    :g/^A/.,/^$/-1j 
    
        3
  •  0
  •   Conner devopensource    12 年前

    试试这个可能:

    :g/^A/normal JJ