【问题标题】:Adding/generating content automatically in Vim在 Vim 中自动添加/生成内容
【发布时间】:2012-11-17 21:07:14
【问题描述】:

我有一个庞大的数字列表,我想在每一行的末尾添加内容。是这样的:

之前:

123123
123123
13234
124125
12634
5234

之后:

123123, 1
123123, 2
13234, 3
124125, 4
12634, 5
5234, 6

几点:

  1. 我知道:range s/oldpattern/newpattern/ 会用新模式替换旧模式。

  2. 我知道for i in range(begin, end) | something | endfor 可以生成这些额外的数字。

但是,我不知道是否可以将它们结合起来做我想做的事(或者是否有不同的方法来做)。有谁知道我怎样才能自动添加这些额外的值?我很确定可以使用 Vim,但我不知道如何。

【问题讨论】:

    标签: loops vim text editing


    【解决方案1】:

    您可以通过直观地选择区域然后键入来做到这一点

    :s/$/\=', '.(line('.')-line("'<")+1)<CR>
    

    (当您在可视模式下键入 : 时会自动添加范围)。需要可视模式来获取 line("'&lt;") 东西,如果您可以输入行号来代替它,请使用任何范围。

    【讨论】:

      【解决方案2】:

      我愿意

      :%!nl
      :%s/\v^\s*(\d+)\s+(.*)$/\2, \1/g
      

      nl 将(默认情况下)跳过编号空行

      或者作为单行者

      :exec "%!nl"|%s/\v^\s*(\d+)\s+(.*)$/\2, \1/g
      

      【讨论】:

      • 请注意,nl 不会为空行编号,因此可能需要使用 nl -ba,具体取决于所需的行为。
      【解决方案3】:
      :%!awk '{print $0", "NR}'
      

      :%!perl -lpe '$_.=", $."'
      

      【讨论】:

        猜你喜欢
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 2015-05-27
        • 2021-05-31
        • 2012-04-09
        • 2017-08-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多