伪造/模拟Vim中的打字

时间:2012-05-05 00:09:11

标签: vim

我正在VimL中编写一个非常小的脚本,我希望模拟给定字符串的实际输入。

我面临的问题是,我尝试的任何东西都会将整个字符串立即放在缓冲区上,因此整个操作看起来非常原子,并且它不会描绘键入char-by-char的自然延迟。 / p>

我已经尝试了以下功能的一些变体,即使我在不​​同的地方添加了sleep 50m,我也没有达到预期的行为:

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

这甚至可能吗?如果是的话,我错过了什么?

1 个答案:

答案 0 :(得分:3)

也许这就是你所需要的。你点击 Ctrl - MiddleMouse 通过char将剪贴板的内容发送到vim char:

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