let i=1 | g/aaa\zs/s//\=i/ | let i=i+1
上述命令在匹配模式后添加计数器编号。因此更改了以下文本。
aaab
aaab
aaab
至
aaa1b
aaa2b
aaa3b
'|'将命令合并为一个命令。在我看来,这些命令是按顺序执行的,首先 let i=1 ,然后 g/aaa\zs/s//\=i/ ,最后 let i=i+1 。从上面的结果来看,s//\=i/**和**let i=i+1是由g命令执行的。谁能解释一下吗? 以下命令执行错误的操作。但不知道为什么。
let i=1 | g/aaa\zs/s//\=i | let i=i+1
最佳答案
在 s//\=i/
,替换字符串终止并且 |
被 global 视为参数。但是,当您删除尾随 /
时,替换字符串为s
消耗 | let i=i+1
。来自 sub-replace-special
的帮助文档,您可以发现:“当替换字符串以“\=”开头时,其余部分将被解释为表达式。”所以表达式i | let i=i+1
已评估,但增量在该评估之外不可用。
关于vim - 求一个vim命令的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24220134/