16

是否可以在 Vim 中用随机生成的数字替换正则表达式?对于与正则表达式匹配的每个模式,要替换的(随机)数字应该不同。这是我需要的一个例子。

输入文件:

<a>XYZ</a>
<a>XYZ</a>
<a>XYZ</a>
<a>XYZ</a>

用随机数替换 XYZ 后,输出可能是:

<a>599</a>  
<a>14253</a>    
<a>1718</a>
<a>3064</a>
4

2 回答 2

25

如果你不介意在你的 vim 中使用一点 perl,你可以使用

:%! perl -pne 's/XYZ/int(rand 1000)/ge'

编辑:根据@hobbes3 的建议,更新为允许在给定行上进行无限替换,所以

XYZ XYZ
XYZ XYZ XYZ 
XYZ XYZ XYZ XYZ XYZ XYZ
XYZ XYZ

变成类似的东西

86 988
677 477 394 
199 821 193 649 502 471
732 208
于 2012-10-04T20:04:36.427 回答
6

试试这个:将下面的代码放到一个缓冲区中,然后获取它(: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 

然后你可以这样做:

:s_\(<a>\).*\(</a>\)_\1\=Choose(line('.')*100).\2_
于 2012-10-04T19:59:52.367 回答