WindowsでVimなどからRを呼ぶ

ここからゲノムと計算機すかを見てAutoHotkey使えばいいんだってことは分かったけど,http://www.josequesada.name/r-vim-suite/に置いてあるスクリプトはちょっと使いにくかった.
F3叩くだけでコピーしてくれることを期待していると思われる行があるけど,VimでC-cしてもコピーされないから意味がない.アクティブなWindowのIDを取得したりしているのでどっちかというとVim以外のエディタ用かなと思う.
ググってたらメーリングリストに投稿されたもうちょっとましなのが見つかった.

けどこれもC-c.送ったコードに改行を一個付け足すから多少は使いやすいんだけど….
というわけでメーリングリストに投稿されてたをちょこっといじって空気読んでRにコード送るヤツを作った.AutoHotkeyスクリプトいじるの初めて.

; F3 will send selection to open Rgui #WinActivateForce
    F3::
    IfWinExist, R Console
    {
        WinGet, active_id, ID, A
        IfWinExist, ahk_class Vim
            Send y   ; yank selected region
        else
            Send ^c  ; copy selection to clipboard
        WinActivate, R Console
        save = %clipboard%
        sendinput, {Raw}%save%
        sendinput,{enter}
        Sleep 1000
        WinActivate, ahk_id %active_id%
    }
return

使用にはAutoHotkeyが必要なのでAutoHotkeyから入手してインストールしておく.その上で上記のスクリプトhoge.ahkとか拡張子.ahkの適当な名前のテキストファイルに保存し,それをダブルクリックするとAutoHotkeyが起動してコマンドが使える状態になる*1
コマンドを使うにはまずRguiをSDIモードで立ち上げておく.次にVimやその他の何か(エディタ以外にブラウザとか何でも良い)で実行したいコードを範囲選択をし,F3.そうするとR Consoleでコードが実行される.
Vimが立ち上がっているとコピーのコマンドがyに,そうでなければCtrl+cになる.また,先にクリップボードにコピーしておいてからF3押してもRへ送れるので,たとえばVimperatorから送りたい時も大丈夫*2
いま適当に作ったので直すところもあるだろうと思うし,そのまま使うときは自分の責任でどうぞ.そんな大したことしてないのでよほど大丈夫だとは思うけど.

*1:実はAutoHotkeyの機能で実行ファイルも作れるんだけどそういうの配って何かあったら嫌だし

*2:まあ条件分岐作ればいいんだけどそんなに使わないし面倒なので