用Vim中的隨機生成的數字替換正則表達式有可能嗎?對於與正則表達式匹配的每個模式,要替換的(隨機)數應該不同。這是我需要的一個例子。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>
用Vim中的隨機生成的數字替換正則表達式有可能嗎?對於與正則表達式匹配的每個模式,要替換的(隨機)數應該不同。這是我需要的一個例子。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>
如果你不介意在你的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
嘗試此:將以下代碼到一個緩衝器然後,源它(: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_
僅供參考,這不是隨機的。但是對於用例來說,這足夠好。 – Sukima
謝謝!那太簡單了!我不知道你可以直接從vim運行perl。 – krjampani
你可以在vim裏運行*任何東西*。有關特別有用的示例,請參閱http://www.commandlinefu.com/commands/view/1204/save-a-file-you-edited-in-vim-without-the-needed-permissions。 –
會爲每行產生一個新的隨機int還是隻使用一個隨機int? –