2012-05-05 10 views
3

私はVimLで非常に小さなスクリプトを書いています。私は与えられた文字列の実際のタイピングをシミュレートしようとしています。Vimでタイピングを模倣/シミュレートする

私が直面している問題は、バッファに文字列全体が即座に配置されるため、操作全体が非常に原子化され、入力によるchar-by-charの自然な待ち時間が示されないということです。

私は、以下の機能のいくつかのバリエーションを試してみた、と私は別の場所で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 

でも可能、このですか?もしそうなら、私は行方不明になっていますか?

答えて

2

多分これはあなたが必要とするものです。これは大きなもののほんの一部であるとして

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 
+0

私は、それ自体がクリップボードの内容を必要としない:charでのvimのchar型にクリップボードの内容を送信するためにMiddleMouse - あなたはにCtrlキーを打ちます私は取り組んでいますが、これは*のスポットです。ありがとうございました! – alfredodeza

+0

関数名を 'FakeTyping'に変更して、次のようにすることができます:':call FakeTyping( 'hello、world') ' – kev

関連する問題