在VIM中的每行末尾添加填充增量编号
我有一个包含列表的文本文件:在VIM中的每行末尾添加填充增量编号,vim,vi,Vim,Vi,我有一个包含列表的文本文件: dateformatfile.ext dateformatfile.ext dateformatfile.ext ... 我需要在每个结尾添加一个填充数字,如下所示: dateformatfile.ext 00001 dateformatfile.ext 00002 dateformatfile.ext 00003 ... 有很多,所以我需要有一个命令来做这件事 提前感谢。假设您要对文件中的每一行执行此操作,您可以使用如下行号: :execute "% norm
dateformatfile.ext
dateformatfile.ext
dateformatfile.ext
...
我需要在每个结尾添加一个填充数字,如下所示:
dateformatfile.ext 00001
dateformatfile.ext 00002
dateformatfile.ext 00003
...
有很多,所以我需要有一个命令来做这件事
提前感谢。假设您要对文件中的每一行执行此操作,您可以使用如下行号:
:execute "% normal A \<C-R>=printf(\"%05d\", line(\".\"))\<CR>"
:执行“%normal A\=printf(\%05d\”,第行(\”)\”
在哪里
将字符串作为命令运行execute(…)
在文件的每一行上运行普通命令%normal
追加到该行A
插入命令的结果=
将第二个参数格式化为五位数printf(“%05d”,…)
line(“.”)获取当前行的编号
完成
插入=
- 使用awk可以很容易地做到这一点。除非重新定义RS变量,否则,和记录将映射到行。因此,以下是:
awk-e'{print$0 NR}文件名
应该可以做到这一点。填充它们是留给读者的练习。我会使用宏(我喜欢宏: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
qq-记录宏q
$-走到队伍的尽头
F-返回到最后一个空格
“ay$-复制到缓冲区a中的行末尾
j$-在下面一行的末尾
“ap-复制缓冲区内容
-增加数量
q-停止录制宏
现在,您可以使用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
这是我的照片
将光标放在要添加第一个数字的第一行。:让i=0
定义一个变量来保存计数。qm
开始将宏记录到寄存器mA=printf(“%05d”,i)
添加一个空格和printf的输出。:让i+=1
增加下一次宏执行的计数。q
结束宏的录制
jVG
Visual选择文档中要添加数字的其余部分。:normal@m
执行宏将数字添加到所选行
我认为这种方法有一些优点:
- 没有必要逃跑
- 计数与行号无关。允许偏移
- 使用宏可以轻松地与:global命令结合使用。例如:
:g/ext$/normal@m
在以ext结尾的行上执行寄存器m中存储的宏。如果您的环境中有PERL,您可以在VIM会话中运行PERL one liner
:%! perl -pe " $count++ ; s/$/$count/"
需要注意的是,您可能必须在perl脚本周围使用双引号。在我的电脑上,如果我使用单引号,PERL将运行。但是我不能用美元符号来表示变量。谢谢你,马修,这非常有效。我希望我能说出那样的话。多亏了其他的答案,我相信它们都能起作用。太好了,我很高兴它对你起作用。我已经每天使用Vim 15年了,我还在学习如何使用它:-)