我想用vim搜索正则表达式模式,并用寄存器中的粘贴替换匹配项。详细地说,这意味着:
acb123acb
asokqwdad
def442ads
asduiosdf
df567hjk
应该以
结束acbXYZacb
asokqwdad
defPOWads
asduiosdf
dafMANhjk
我在哪里
XYZ
POW
MAN
在寄存器A(:g / pattern / y A)
中要搜索的正则表达式模式可能是[0-9] {3}以匹配文本块中的3个数字。
如果匹配之间没有线路,则阻止模式会有所帮助......
我当然可以使用perl脚本。但是我确定,如果可能的话,它会更快,对吧?
提前谢谢
答案 0 :(得分:3)
如果要将匹配[0-9]{3}
的所有字符串替换为相同的值,这恰好是寄存器a
的内容:
:%s/\v\d{3}/\=@a/g
详细说明:
:%
- 适用于缓冲区中的所有行s/.../.../g
- 替换所有出现次数\v
- 以下是“非常神奇”的正则表达式\d{3}
- 匹配3位数字\=
- 替换为... @a
- 注册a
另一方面,如果您想从寄存器a
读取替换值:
:let a=getreg('a', 1, 1)
:%s/\v\d{3}/\=remove(a, 0)/g
详细说明:
let a=getreg('a', 1, 1)
- 将注册表a
的内容转移到列表中,富有想象力地命名为a
remove(a, 0)
- 删除列表a
中的第一个元素并将其返回。此外,令人遗憾的是,VimL远没有Perl那么快。 :)