是否可以用Vim中随机生成的数字替换正则表达式?对于与正则表达式匹配的每个模式,要替换的(随机)数字应该是不同的.这是我需要的一个例子.
输入文件:
<a>XYZ</a>
<a>XYZ</a>
<a>XYZ</a>
<a>XYZ</a>
Run Code Online (Sandbox Code Playgroud)
用随机数代替XYZ后,输出可以是:
<a>599</a>
<a>14253</a>
<a>1718</a>
<a>3064</a>
Run Code Online (Sandbox Code Playgroud)
Bar*_*den 24
如果你不介意你的vim中的一点perl,你可以使用
:%! perl -pne 's/XYZ/int(rand 1000)/ge'
Run Code Online (Sandbox Code Playgroud)
编辑:根据@ hobbes3的建议更新以允许给定行上的无限替换,所以
XYZ XYZ
XYZ XYZ XYZ
XYZ XYZ XYZ XYZ XYZ XYZ
XYZ XYZ
Run Code Online (Sandbox Code Playgroud)
变得像
86 988
677 477 394
199 821 193 649 502 471
732 208
Run Code Online (Sandbox Code Playgroud)
试试这个:将下面的代码放到缓冲区然后获取它(:source %).
let rnd = localtime() % 0x10000
function! Random()
let g:rnd = (g:rnd * 31421 + 6927) % 0x10000
return g:rnd
endfun
function! Choose(n) " 0 n within
return (Random() * a:n) / 0x10000
endfun
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
:s_\(<a>\).*\(</a>\)_\1\=Choose(line('.')*100).\2_
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3484 次 |
| 最近记录: |