[[autohotkey]]を使って、viのキーバインドをまねるスクリプト。 windowsアプリのカーソル操作をviライクにできます。 Excelのセル移動もjiklでできます。 (以下のソースをvikey.ahkとして保存して実行をする) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;2010/10/01 vikey.ahk ; viのキー操作でwindowsアプリを操作する ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ViMode = normal SetTimer, ViShowInfo, 50 ; End of auto-execute section ^!r::Reload ^h::Send, {BS} ViShowInfo: ToolTip, %ViMode%, 0, 0, 20 return #UseHook #IfWinNotActive ahk_class Vim ESC:: Send, {Shift Up} ViMode = normal return +1:: +2:: +3:: +4:: +5:: +6:: +7:: +8:: +9:: +0:: 1:: 2:: 3:: 4:: 5:: 6:: 7:: 8:: 9:: 0:: +b:: +c:: +e:: +f:: +m:: +n:: +q:: +r:: +s:: +t:: +w:: ;;;; +x:: +z:: b:: c:: e:: f:: g:: m:: n:: q:: r:: s:: t:: w:: ;;;; x:: y:: z:: if ViMode = insert Send, %A_ThisHotkey% return +g:: if ViMode <> insert Send, ^{END} else Send, %A_ThisHotkey% return ;A:: ; if ViMode = insert ; Send, A ; If ViMode = normal ; { ; Send, {END} ; VimMode = insert ; } return a:: if ViMode = insert Send, a if ViMode = normal { Send, {RIGHT} ViMode = insert } return i:: if ViMode = insert Send, i if ViMode = normal ViMode = insert return +D:: d:: if ViMode <> insert { ViMode = normal Send, {Shift Up} Send, {Delete} } else Send, %A_ThisHotkey% return v:: if ViMode = normal { Send, {Shift Down} ViMode = visual return } if ViMode = insert Send, v return +V:: if ViMode = visual { Send, {Shift Up} ViMode = normal return } if ViMode = insert Send, %A_ThisHotkey% return +y:: if ViMode = visual { Send, {Shift Up} Send, ^c ViMode = normal return } if ViMode = insert Send, %A_ThisHotkey% return p:: if ViMode = normal Send, ^v if ViMode = insert Send, %A_ThisHotkey% return +H:: h:: if ViMode <> insert Send, {LEFT} if ViMode = insert Send, %A_ThisHotkey% return +J:: j:: if ViMode <> insert Send, {DOWN} if ViMode = insert Send, %A_ThisHotkey% return +K:: k:: if ViMode <> insert Send, {UP} if ViMode = insert Send, %A_ThisHotkey% return +L:: l:: if ViMode <> insert Send, {RIGHT} if ViMode = insert Send, %A_ThisHotkey% return u:: if ViMode = normal Send, ^z if ViMode = insert Send, u return +o:: if ViMode = insert Send, O if ViMode = normal { ViMode = insert Send, {HOME}{ENTER}{UP} } return o:: if ViMode = insert Send, o if ViMode = normal { ViMode = insert Send, {HOME}{DoWN}{ENTER}{UP} } return x:: if ViMode <> insert Send, {DELETE} if ViMode = insert Send, %A_ThisHotkey% return +`;:: if ViMode = normal { ViMode = insert InputBox, In, Vi ViMode = normal if In = w Sleep, 20 Send, ^s } if ViMode = insert Send, `: return #UseHook of