0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SpaceキーをFnのようにして快適なキーボード操作を手に入れよう!(AutoHotkey実装紹介)

Last updated at Posted at 2025-05-26

はじめに

こんにちは!みなさんはタイピングの際、ホームポジションから手を離してカーソルキーまで指を運ぶのが面倒だと感じたことはありませんか?特に、カッコを閉じてからキャレットを中央に戻す操作スタイルの方は、書くたびに矢印キーに手を伸ばすことになりますよね。

そんな悩みを解決するのが今回ご紹介するカスタマイズです。Spaceキーを右手の親指で押しながら他のキーを押すことで、カーソル移動や文字削除などの操作をホームポジションから操作できるようになります。
※本記事ではWindowsでのAutoHotkey利用を想定しています。

この記事でできるようになること

  • スペースキーをFnキーのようにして、ホームポジションのまま以下の操作ができる
    • カーソル移動 (↓ ↑ ← →, Home/End)
    • バックスペース・削除
    • PageUp/PageDown
    • PrintScreen

実装コード

; SpaceFn 実装
whenSpaceFn := false
spaceFnTriggered := false
altSpace := false
~!Space::
{
    ; Alt + Space では通常の Alt + Space 動作にする
    global altSpace
    altSpace := true
    Return
}
*Space::
{
    global whenSpaceFn
    whenSpaceFn := true
}
*Space up::
{
    global whenSpaceFn
    global spaceFnTriggered
    global altSpace
    ; Alt + Space では通常の Alt + Space 動作にする
    if altSpace {
        altSpace := false
        Return
    }

    if !spaceFnTriggered {
        ; Space 単体押しの場合は通常の Space 動作
        Send "{Blind}{Space}"
    } else {
        ; スペースとコンビネーションキーがほぼ同時に離れた際の判定バッファ
        while (A_TimeIdlePhysical < 60) {
            Sleep 10
        }
    }
    whenSpaceFn := false
    spaceFnTriggered := false
    altSpace := false
}
sendKeyWithSpaceFn(key) {
    global spaceFnTriggered
    spaceFnTriggered := true
    SendEvent "{Blind}{" . key . "}"
}
sendKeyAfterSpace(key) {
    global spaceFnTriggered
    if spaceFnTriggered {
        Send "{Blind}{" . key . "}"
    } else {
        spaceFnTriggered := true
        Send "{Blind}{Space}{" . key . "}"
    }
}
#HotIf whenSpaceFn
    *j::sendKeyWithSpaceFn("Left")
    *k::sendKeyWithSpaceFn("Down")
    *l::sendKeyWithSpaceFn("Right")
    *i::sendKeyWithSpaceFn("Up")
    *o::sendKeyWithSpaceFn("Home")
    *sc027::sendKeyWithSpaceFn("End") ; ;キー
    *h::sendKeyWithSpaceFn("Backspace")
    *m::sendKeyWithSpaceFn("Delete")
    *sc033::sendKeyWithSpaceFn("PgUp") ; ,キー
    *sc034::sendKeyWithSpaceFn("PgDn") ; .キー
    *p::sendKeyWithSpaceFn("PrintScreen")

    *Enter::sendKeyAfterSpace("Enter")
    *Left::sendKeyAfterSpace("Left")
    *Right::sendKeyAfterSpace("Right")
    *Up::sendKeyAfterSpace("Up")
    *Down::sendKeyAfterSpace("Down")
#HotIf

主な機能の説明

基本操作

  • Space + J/K/L/I: 左/下/右/上にカーソル移動
  • Space + H/M: Backspace/Delete
  • Space + O/;: Home/End (行頭/行末へい)
  • Space + ,/.: PageDown/Up
  • Space + P: PrintScreen

特徴的な実装

  1. 自然な操作感: スペース単体押しでは通常のスペースとして機能
  2. 同時押し判定: キーリピートや、Enterキー等を際どいタイミングで押した際の誤判定を防ぐ工夫
  3. Alt+Spaceの互換性: Alt+Spaceの通常動作を維持

カスタマイズのヒント

上記がおすすめの形ですが、キーアサインはお好みで変更可能です。

例えば:

#HotIf whenSpaceFn
    ; Vimスタイルの移動
    *h::sendKeyWithSpaceFn("Left")
    *j::sendKeyWithSpaceFn("Down")
    *k::sendKeyWithSpaceFn("Up")
    *l::sendKeyWithSpaceFn("Right")
#HotIf

おわりに

このSpaceFnを導入すれば、カッコを書いた後に矢印キーに手を伸ばす必要がなくなり、コーディングや文章作成が格段に快適になります。

console.log('hogehoge'); のように、「カッコを入力 → カーソルを内側に → シングルクォーテーションを入力 → カーソルを内側に → "hogehoge" を入力 → 末尾にEnd (Space+;) で移動」といった操作をしてみると、右手をまったく動かさなくて済むことに驚くのではないかと思います。

最初は慣れが必要かもしれませんが、一度使いこなすと手放せなくなること間違いなしです!ぜひお試しください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?