📝

Vim風のAutoHotKey

に公開

パソコン作業が多い人はAutoHotKeyは有名な便利ツールだと思います。

最近ぼくはVimを使うことが多くなってきたので、AutoHotKeyの設定もVim風にしてみました。「無変換キー」を押しながらコマンドをたたくことでVim同様のふるまいをするようにしています。

あくまで "風” なので、注意点がたくさんあるので、同じスクリプトを使う場合は読んでから使ってください。

スクリプト

; 無変換を無効
vk1D::Return

; 上下左右
vk1D & h::Send {Left}
vk1D & k::Send {Up}
vk1D & j::Send {Down}
vk1D & l::Send {Right}

; 無変換 + 0で文頭へ、無変換 + 4で文末へ(4は$の代わり、改行に非対応)
vk1D & 0::Send {Home}
vk1D & 4::Send {End}

; 無変換 + wで一文字進む、無変換 + bで一単語戻る
vk1D & w::Send ^{Right}
vk1D & e::Send ^{Right}
vk1D & b::Send ^{Left}

; 無変換 + cで一単語を消す(cwのつもり)
vk1D & c::Send ^+{Right}{Delete}

; 無変換 + xで一文字削除(ヤンクはしません)
vk1D & x::Send {Delete}

; この辺は普通のコピペのショートカット使った方が早いと思います。なのでコメントアウト
; vk1D & d::Send ^x
; vk1D & y::Send ^c
; vk1D & p::Send ^v

; 無変換 + uでundo, 無変換 + rでredo
vk1D & u::Send ^z
vk1D & r::Send ^y

; 無変換 + yで一行分コピー、無変換 + dで一行削除(改行非対応)
vk1D & y::Send {Home}+{End}^c
vk1D & d::Send {Home}+{End}^x

; 無変換 + shift + v で一行選択(改行非対応)
vk1D & v::
    if GetKeyState("Shift", "P") {
        Send {Home}+{End}
    }
    return

; 無変換 + oで下に行を追加、無変換 + shift + oで上に行を追加
vk1D & o::
    if GetKeyState("Shift", "P")
        Send {Home}{Enter}{Up}
    else
        Send {End}{Enter}
    return

; 無変換 + gでページの最初へ、無変換 + shift + gでページの最後へ移動
vk1D & g::
    if GetKeyState("Shift", "P") {
        Send ^{End}
    } else {
        Send ^{Home}
    }
    return

; Aコマンドのつもり
vk1D & a::
    if GetKeyState("Shift", "P") {
        Send {End}
    }
    return

; vim 関係ないけど便利だから
; Ctrl + →で右の仮想デスクトップへ、Ctrl + ←で左の仮想デスクトップへ
^Left::Send {Blind}#^{Left}
^Right::Send {Blind}#^{Right}

注意点

  • ddやyyのように二回打ち込むものの再現ができないので一度打ち込むだけで動作するようになってます
  • $コマンドは改行に対応してません(何か策があればコメントください)
  • d, y, pコマンドはそのまま、Ctrl + X, Ctrl + C, Ctrl + Vを使った方が早いと思うのでコメントアウトしています。
  • また、dコマンドについては、有効にするとddコマンドと重複するので、どちらかを無効にする必要があります。

Discussion