vim 搜索正则表达式替换为寄存器
vim search regular expression replace with register
我想用 vim 搜索正则表达式模式并用寄存器中的粘贴替换匹配项。详细意思是:
acb123acb
asokqwdad
def442ads
asduiosdf
df567hjk
应该以
结束
acbXYZacb
asokqwdad
defPOWads
asduiosdf
dafMANhjk
我在哪里
XYZ
POW
MAN
在寄存器 A (:g/pattern/y A)
要搜索的正则表达式模式可能是 [0-9]{3},以匹配文本块中的 3 个数字。
如果匹配之间没有线条,块模式会有所帮助...
因此我当然可以使用 perl 脚本。但是我敢肯定,如果可能的话 vim 会快很多,对吧?
提前致谢
如果要将匹配[0-9]{3}
的所有字符串替换为相同的值,恰好是寄存器a
的内容:
:%s/\v\d{3}/\=@a/g
详细:
:%
- 应用于缓冲区中的所有行
s/.../.../g
- 替换所有
\v
- 接下来是 "very magic" 正则表达式
\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
和 returns 中的第一个元素。
此外,遗憾的是,VimL 的速度远不及 Perl。 :)
我想用 vim 搜索正则表达式模式并用寄存器中的粘贴替换匹配项。详细意思是:
acb123acb
asokqwdad
def442ads
asduiosdf
df567hjk
应该以
结束acbXYZacb
asokqwdad
defPOWads
asduiosdf
dafMANhjk
我在哪里
XYZ
POW
MAN
在寄存器 A (:g/pattern/y A)
要搜索的正则表达式模式可能是 [0-9]{3},以匹配文本块中的 3 个数字。
如果匹配之间没有线条,块模式会有所帮助...
因此我当然可以使用 perl 脚本。但是我敢肯定,如果可能的话 vim 会快很多,对吧?
提前致谢
如果要将匹配[0-9]{3}
的所有字符串替换为相同的值,恰好是寄存器a
的内容:
:%s/\v\d{3}/\=@a/g
详细:
:%
- 应用于缓冲区中的所有行s/.../.../g
- 替换所有\v
- 接下来是 "very magic" 正则表达式\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
和 returns 中的第一个元素。
此外,遗憾的是,VimL 的速度远不及 Perl。 :)