今天学习一条vim的脚本命令
:let i=1 | g/numk/s//=i/ | i=i+1
功能是依次替换numk为递增的数字
但是我没看明白
管道符不是把前一个命令的输出作为后一个命令的输入吗,那global是在每行运行命令,中间的i和后面的i=i+1是怎么交换i的值的?
这个Vim脚本命令的作用是在当前文档中找到所有包含字符串"numk"的行,将该行中的"numk"替换为递增的数字,从1开始。下面是该命令的详细解释:
:let i=1:设置变量i的初始值为1。
|:使用管道符将多个命令连接起来,表示逐个执行这些命令。
g/numk/:执行的是全局命令,它会对包含字符串"numk"的所有行执行后面的命令。
s//=i/:对当前行执行替换命令,将行中的"numk"替换为i的值。//表示使用上次使用的查找模式,也就是查找"numk"的模式。
i=i+1:将变量i的值加1。
因为这是在全局命令中执行的,所以在替换每个包含"numk"的行时,都会将变量i的值更新为下一个数字,以便下一次替换使用。由于变量i在全局命令中被引用,所以每次更新后的值会被保留,直到全局命令执行完成。这就实现了将"numk"替换为递增数字的效果。