Sendkey

vimから他のアプリケーションにキーシーケンスを送って制御する関数を作った。
って、単にWScript.Shellを呼び出してるだけだけど。

使い方

:call Sendkey('対象アプリケーションのウインドウタイトル','送信するキーシーケンス')

コード本体

function! Sendkey(app,keys)
ruby <<
  require 'win32ole'
  wsh=WIN32OLE.new('WScript.Shell')
  wsh.AppActivate(VIM.evaluate('a:app'))
  wsh.SendKeys(VIM.evaluate('a:keys'))
  wsh.AppActivate($curbuf.name.gsub(/.*\//,''))
.
endfunction

使用例

F5を押すと、編集中のHaskellソースを一時ファイルに書き出してghciにロードさせてmainを実行させる

map <F5> :silent! w! d:/tmp/tmp/a.hs<CR>:call Sendkey('ghci','{:}l d{:}/tmp/tmp/a~main~')<CR>

おぼえがき

改行は~
()[]{}:+^%~の文字自体を使うときは{}で囲む
mapするキーにshift,ctrl等を併用するものを使うと、sendkeys実行時にも影響するので注意。