结束每一行的我在它与列表的文本文件:添加软垫递增编号在VIM
dateformatfile.ext
dateformatfile.ext
dateformatfile.ext
...
我需要一个软垫号码添加到每个月底,像这样:
dateformatfile.ext 00001
dateformatfile.ext 00002
dateformatfile.ext 00003
...
有很多,所以我需要有一个命令来做到这一点。
在此先感谢。
结束每一行的我在它与列表的文本文件:添加软垫递增编号在VIM
dateformatfile.ext
dateformatfile.ext
dateformatfile.ext
...
我需要一个软垫号码添加到每个月底,像这样:
dateformatfile.ext 00001
dateformatfile.ext 00002
dateformatfile.ext 00003
...
有很多,所以我需要有一个命令来做到这一点。
在此先感谢。
假设你想在你的文件中的每一行做到这一点,你可以用这样的行号:
:execute "% normal A \<C-R>=printf(\"%05d\", line(\".\"))\<CR>"
其中
execute(...)
运行字符串命令% normal
在文件的每一行上运行正常命令A
附加到行<C-R>=
插入一个命令printf("%05d", ...)
格式化所述第二参数作为五位数字line(".")
的结果获取当前行的<CR>
数完成<C-R>=
插入人们可以使用awk很容易做到这一点。 NR variable gives you the record number,并记录映射到行,除非重新定义RS变量。所以如下:
awk -e '{ print $0 NR }' filename
应该做的伎俩。填充它们是留给读者的练习。
我会这样做使用宏(我喜欢宏:D)。
首先,让我们来处理这些数字(我们稍后再填充它们)。 手动添加第一行末尾的数字1。 然后在第一线记录本宏:
qq - record the macro q
$ - go at the end of the line
F<space> - go backward to the last space
"ay$ - copy till the end of the line in the buffer a
j$ - go at the end of the line below
"ap - copy the buffer content
<ctrl+A> - increment the number
q - stop recording the macro
现在你可以用1000 @ q应用它一堆倍(将在该文件的末尾停止)。
这不是很漂亮,但它的工作。
对于填充,我会使用另一个丑陋的技巧。首先,使用正则表达式匹配3位数字并在之前添加0,然后使用2位数字(此时添加两个0)来执行相同的操作,依次类推...
vim宏很丑,但它们很有用对我来说,当我厌倦写一个指纹时(我应该学习awk)。此外,它们可以帮助您记住一些晦涩难懂的vim快捷方式。
如果您的文本块位于文件的开头。这意味着要追加“00001”该行是文件的第一行,试试这个命令,我只是简单地检查与ext
结束行了,你可以把它是否需要将其更改为正确的正则表达式:
:%s/ext$/\="ext ".printf("%05d", line("."))/g
如果文本块不在文件的开头。你刚才检查第一线的块,并得到行号(要追加00001行),例如,行数5:
:let b=5|%s/ext$/\="ext ".printf("%05d", line(".")-b+1)/g
这是我服用。
将光标定位在要添加第一个数字的第一行上。
:let i=0
定义一个变量来保存计数。
qm
开始将宏记录到寄存器m。
A <C-R>=printf("%05d", i)<CR><ESC>
添加一个空格和printf的输出。
:let i+=1
递增下一次宏执行的计数。
q
结束宏的记录。
jVG
可视化选择我们想要添加数字的文档的其余部分。
:normal @m
执行宏以将数字添加到选定的行。
我认为这种做法有一定的优势:
:g/ext$/ normal @m
执行宏存储在在分机结束行寄存器米。
如果您的环境中有PERL,则可以在VIM会话中单行运行PERL。
:%! perl -pe " $count++ ; s/$/$count/"
需要注意的是,您可能必须在perl脚本周围使用双引号。在我的PC上,如果我使用单引号,PERL将运行。但我无法用美元符号来解决变数。
谢谢马修,完美的工作。我希望我能拿出那样的东西。也感谢其他答案,我相信他们都可以工作。 – j0nr
太棒了,我很高兴它为你工作。我一直在使用Vim每天使用15年,我仍然在学习如何使用它:-) –