我想用 vim 搜索正则表达式模式,并用寄存器中的粘贴替换匹配项。详细来说这意味着:
acb123acb
asokqwdad
def442ads
asduiosdf
df567hjk
Run Code Online (Sandbox Code Playgroud)
应该结束于
acbXYZacb
asokqwdad
defPOWads
asduiosdf
dafMANhjk
Run Code Online (Sandbox Code Playgroud)
我在哪里
XYZ
POW
MAN
Run Code Online (Sandbox Code Playgroud)
在寄存器 A 中 (:g/pattern/y A)
要搜索的正则表达式模式可能是 [0-9]{3} 以匹配文本块中的 3 个数字。
如果比赛之间没有线条,块模式会有所帮助......
因此我当然可以使用 perl 脚本。不过我确信,如果可能的话,在 vim 中它会快得多,对吧?
先感谢您
如果你想替换所有[0-9]{3}与相同值匹配的字符串,这恰好是 register 的内容a:
:%s/\v\d{3}/\=@a/g
Run Code Online (Sandbox Code Playgroud)
详细地:
:%- 适用于缓冲区中的所有行s/.../.../g- 替换所有出现的情况\v- 接下来是一个“非常神奇”的正则表达式\d{3}- 匹配3位数字\=- 替换为...的值@a- 登记a另一方面,如果您想从寄存器读取替换值a:
:let a=getreg('a', 1, 1)
:%s/\v\d{3}/\=remove(a, 0)/g
Run Code Online (Sandbox Code Playgroud)
详细地:
let a=getreg('a', 1, 1)- 将寄存器的内容转移a到一个列表中,想象一下也可以这样命名aremove(a, 0)- 删除列表中的第一个元素a并返回它。而且,遗憾的是,VimL 的速度远不及 Perl。:)
| 归档时间: |
|
| 查看次数: |
2593 次 |
| 最近记录: |