2016-05-18 10 views
1

Ist es möglich, ein Skript für vim zu schreiben, so dass es nach einer Zeichenfolge sucht, z. B. gkfjjcjfk8483jdjd7. Und ersetzt dann die gefundene Zeichenfolge durch eine zufällig generierte Zeichenfolge? Es muss eine zufällige Zeichenfolge aus Zahlen und anderen Zeichen generieren können.Skript, um nach einer Zeichenfolge zu suchen und sie durch zufällige Zeichen und Zahlen zu ersetzen

Wenn mir jemand mit einem solchen Skript helfen kann, würde ich es wirklich zu schätzen wissen.

Antwort

2

Hier gehen Sie:

function! ReplaceWithRandom(search) 
    " List containing the characters to use in the random string: 
    let characters = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',] 

    " Generate the random string 
    let replaceString = "" 
    for i in range(1, len(a:search)) 
     let index = GetRandomInteger() % len(characters) 
     let replaceString = replaceString . characters[index] 
    endfor 

    " Do the substitution 
    execute ":%s/" . a:search . "/" . replaceString . "/g" 

endfunction 

function! GetRandomInteger() 
    if has('win32') 
     return system("echo %RANDOM%") 
    else 
     return system("echo $RANDOM") 
    endif 
endfunction 

Die Funktion kann wie folgt aufgerufen werden: :call ReplaceWithRandom("stringtoreplace"). Und es ersetzt alle Vorkommen der Zeichenfolge, die als Argument übergeben wird, durch eine zufällige Zeichenfolge, die aus den in characters aufgelisteten Zeichen besteht.

Beachten Sie, dass ich eine Hilfsfunktion hinzugefügt habe, die Zufallszahlen aus dem System erhält, da Vim keinen Zufallsgenerator bereitstellt.

Als Bonus Sie es ein Befehl machen kann, den Anruf zu befestigen:

command! -nargs=1 RWR call ReplaceWithRandom(<f-args>) 

Anschließend können Sie tun: :RWR "stringtoreplace"


bearbeiten: Und wenn Sie möchten, die zufällige Zeichenfolge Bei jedem Vorkommen der gesuchten Zeichenkette kann die Funktion durch diese ersetzt werden:

function! ReplaceWithRandom(search) 
    " List containing the characters to use in the random string: 
    let characters = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',] 


    " Save the position and go to the top of the file 
    let cursor_save = getpos('.') 
    normal gg 

    " Replace each occurence with a different string 
    while search(a:search, "Wc") != 0 
     " Generate the random string 
     let replaceString = "" 
     for i in range(1, len(a:search)) 
      let index = GetRandomInteger() % len(characters) 
      let replaceString = replaceString . characters[index] 
     endfor 

     " Replace 
     execute ":s/" . a:search . "/" . replaceString 
    endwhile 

    "Go back to the initial position 
    call setpos('.', cursor_save) 

endfunction 
Verwandte Themen