Vim递增数列

yquaqz18  于 12个月前  发布在  其他
关注(0)|答案(6)|浏览(174)

通常我处理的文件如下所示:

0.98   3.45
2.45   3.90
.
.
.
4.56   8.45

字符串
比如说100行。我想得到这样的东西:
第一列是整数。我通常做的是生成一个只包含数字1、2...... 100的列文件,然后选择该块并将其粘贴到包含两列的文件中。由于行数几乎总是不同的,因此我的方法似乎非常慢。
你有什么建议吗?
谢谢.

hc2pp10m

hc2pp10m1#

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

字符串
详细信息请参阅:

:help :s\= 
:help printf()
:help line()

kcugc4gi

kcugc4gi2#

下面是一个仅支持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


到这个

5sxhfpxr

5sxhfpxr3#

我发现VisIncr对于类似的操作是非常宝贵的(这里的the GitHub version是为那些使用Vundle或NeoBundle的人准备的)。该插件“便于制作一列递增或递减的数字,日期或日期名称”。下面是添加行号的示例:
在视觉块模式下选择文件的第一列:

gg<C-v>G

字符串
插入一个起始数字(本例中为1)和一个列分隔符(我假设这里是Tab):

I1<Tab><Esc>


重新选择文件的第一列:

gv


运行VisIncr命令以增加数字:

:I<CR>


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

:II<CR>


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

yyhrrdl8

yyhrrdl84#

:%!cat -n

字符串
是一个快速的解决方案。

:%s/^\s*//g


它能很快满足你的需求

wwtsj6pe

wwtsj6pe5#

要生成一列序列号,nl是您的朋友。假设您要生成从1n的列:
1.在Vim中创建包含n行的文件。
1.运行:%!nl
现在,您可以使用<C-v>来选择数字列,并将它们复制到其他位置。

iszxjhcz

iszxjhcz6#

1.输入数字1,然后复制100次,例如

y + 100

字符串
1.进入视觉块并选择从第二行开始的所有数字
1.最后按

g + <C-a>

相关问题