Vim用随机生成的数字替换正则表达式

krj*_*ani 15 vim

是否可以用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)

  • 你可以在vim里面运行*任何东西*.有关特别有用的示例,请参阅http://www.commandlinefu.com/commands/view/1204/save-a-file-you-edited-in-vim-without-the-needed-permissions. (2认同)

Zso*_*kai 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 
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

:s_\(<a>\).*\(</a>\)_\1\=Choose(line('.')*100).\2_
Run Code Online (Sandbox Code Playgroud)