4 Stimmen

Tippen in Vim vortäuschen/simulieren

Ich schreibe ein sehr kleines Skript in VimL und möchte die tatsächliche Eingabe einer bestimmten Zeichenkette simulieren.

Das Problem, dem ich gegenüberstehe, ist, dass alles, was ich versuche, die gesamte Zeichenfolge sofort in den Puffer legt, so dass der gesamte Vorgang ziemlich atomar aussieht und es nicht die natürliche Latenz von Zeichen für Zeichen der Eingabe darstellt.

Ich habe einige Varianten der folgenden Funktion ausprobiert, und obwohl ich eine sleep 50m an verschiedenen Stellen, erhalte ich nicht das gewünschte Verhalten:

function! FakeTyping(string)
    let list = split(a:string)
    for word in list
        for letter in split(word)
            execute "normal a" . letter . "\<esc>"
        endfor
    endfor
endfunction

Ist das überhaupt möglich, und wenn ja, was fehlt mir?

3voto

kev Punkte 145226

Vielleicht ist das genau das Richtige für Sie. Sie treffen Ctrl - MiddleMouse um den Inhalt der Zwischenablage Zeichen für Zeichen an den Vim zu senden:

nmap <C-MiddleMouse> :call AnimateText(@*)<CR>
fun! AnimateText(text)
    let lineno = line('.')
    let lines = split(a:text, "\n")
    for line in lines
        call setline(lineno, '')
        let chars = split(line, '.\zs')
        let words = ''
        for c in chars
            let words .= c
            call setline(lineno, words)
            call cursor(lineno, 0)
            normal z.
            if c !~ '\s'
                sleep 100m
                redraw
            endif
        endfor
        let lineno += 1
    endfor
endfun

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X