4

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

我面临的问题是,我尝试的任何操作都会立即将整个字符串放在缓冲区上,因此整个操作看起来非常原子,并且它没有描绘逐字符输入的自然延迟。

我尝试了以下函数的一些变体,即使我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

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

4

1 回答 1

3

也许这就是你需要的。您点击Ctrl-MiddleMouse将剪贴板的内容按字符发送到 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
于 2012-05-05T00:20:14.287 回答