通常我处理的文件如下所示:
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 的列文件,然后选择该块并 将其粘贴到包含两列的文件中。由于行数是 几乎总是不同我的方法似乎很慢。
您有什么建议吗?
谢谢。
:%s/^/\=printf('%-3d ', line('.'))
更多信息:
:help :s\=
:help printf()
:help line()
这是一个替代的仅 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
:%!cat -n
是一个快速的解决方案。紧随其后的是
:%s/^\s*//g
它很快就能给你你想要的东西。
对于生成一列连续数字,
nl
是你的朋友。假设你想生成从 1
到 n
:
在 vim 中创建一个包含
n
行的文件。运行
:%!nl
。现在您可以使用
<C-v>
选择数字列并将其复制到其他位置。
例如输入数字 1 然后复制 100 次
y + 100
进入可视区块,选择从第二行开始的所有数字
最后按
g + <C-a>