10

通常我处理看起来像这样的文件:

0.98   3.45
2.45   3.90
.
.
.
4.56   8.45

让我们说 100 行。我想得到这样的东西:

1   0.98   3.45
2   2.45   3.90
.
.
.
100 4.56   8.45

第一列整数。我通常做的是生成一个只有数字 1,2...100 的列文件,然后选择该块并将其粘贴到具有两列的文件中。由于行数几乎总是不同,我的方法似乎很慢。

你有什么建议吗?

谢谢。

4

5 回答 5

16
:%s/^/\=printf('%-3d ', line('.'))

更多信息:

:help :s\= 
:help printf()
:help line()
于 2013-08-13T21:59:22.913 回答
4

我发现VisIncr对于类似的操作非常宝贵(这里是使用 Vundle 或 NeoBundle 的人的 GitHub 版本)。该插件“有助于制作增加或减少数字、日期或日期名称的列”。添加行号的示例如下:

在可视块模式下选择文件的第一列:

gg<C-v>G

插入一个起始编号(在这种情况下为 1)和一个列分隔符(我在这里假设 Tab):

I1<Tab><Esc>

重新选择文件的第一列:

gv

运行 VisIncr 命令以增加数字:

:I<CR>

您可以使用不同的命令来右对齐数字:

:II<CR>

递增日期、字母、十六进制和罗马数字同样简单。

于 2013-11-28T01:29:59.370 回答
3
:%!cat -n

是一个快速的解决方案。其次是

:%s/^\s*//g

它很快就会给你你想要的东西。

于 2013-08-14T07:47:59.850 回答
1

这是另一种仅 vim 的普通模式版本。将光标放在第一列的第一行:

<C-v>GI0 <ESC>gvg<C-a>
  • <C-v>视觉块模式 ( :help visual-block)
  • G被选择到屏幕底部 ( :help G)
  • I在第 1 行开始插入模式 ( :help v_b_I)
  • 0 输入文字零和文字空格
  • <ESC>回到正常模式
  • gv重新选择最后一个视觉选择(所有第 1 列)(:help gv
  • g<C-a>依次递增选择中的所有数字 ( :help v_g_CTRL-A)

转这个

0.98   3.45
2.45   3.90
4.56   8.45

进入这个

1 0.98   3.45
2 2.45   3.90
3 4.56   8.45
于 2021-12-03T04:50:00.027 回答
1

对于生成一列序列号,nl是你的朋友。假设您要生成 from 1to n

  1. n在 vim 中创建一个带有行的文件。

  2. 运行:%!nl

现在您可以使用<C-v>选择数字列并将它们复制到其他地方。

于 2018-07-09T11:17:06.133 回答