5

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

前:

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 是可能的,但我不知道如何。

4

3 回答 3

5

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

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

:(从可视模式键入时会自动添加范围)。需要可视模式来获取line("'<")内容,如果您可以输入行号来代替它,请使用任何范围。

于 2012-11-17T21:15:32.160 回答
2

我会做

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

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

或作为单行者

:exec "%!nl"|%s/\v^\s*(\d+)\s+(.*)$/\2, \1/g
于 2012-11-17T21:24:46.723 回答
0
:%!awk '{print $0", "NR}'

或者

:%!perl -lpe '$_.=", $."'
于 2012-11-17T22:10:13.273 回答