⌨️

MacのEmacsキーバインドと同じことをWindowsでも実現したい!

に公開

TL;DR

  • Windows環境で、MacのEmacs風キーバインド(特にカーソル移動など)を、既存のCtrlキーショートカットを維持したまま実現しました
  • PowerToysのKeyboard Managerを使い、CapsLockキーをF13キー(通常使われないキー)にリマップします
  • AutoHotkey (v2) を使用し、このF13キーと他のキー(例: F, B, P, N)の組み合わせで、Emacsライクなカーソル移動や編集操作を定義しました

はじめに

Macを使っていると、CapsをCtrlキーに置き換えてEmacsキーバインドを利用する。という設定がデフォルト設定で簡単にできるためかなり快適です

ただ、Macと違いWindowsではCtrlキーにショートカットが依存しているため、同じことをしようとすると、コピペなどの多数のショートカットとコンフリクトしてしまう課題があります...

正直私の要求としては、テキスト入力時にカーソル移動とCtrl+K、Ctrl+Dあたりが使いたいだけなので、この記事ではCapsを置き換えていい感じのEmacsキーバインド的体験を実現していきます

Windowsでの実現

WindowsでMacのようなEmacsキーバインド体験(ただしCtrlキーはそのまま)を実現するために、以下の2つのツールを組み合わせます

  1. PowerToys (Keyboard Manager): CapsLockキーを別のキー(今回はF13キー)へ簡易的に割り当てます
  2. AutoHotkey: 再割り当てされたF13キーを修飾キーとして、特定のキーコンビネーションに対してEmacs風の動作を定義します

当初、AutoHotkeyのみでCapsLockキーのリマップとホットキー定義を試みましたが、私の環境ではCapsLockキーからF13キーへのリマップがうまく機能しませんでした。そのため、PowerToysでキーリマップを行い、AutoHotkeyはその結果を利用する形に落ち着きました。

※注意点※

CapsLockキーをF13キーに置き換えるため、CapsLockとして機能は使えなくなります。
このデメリットを許容できるなら問題ありません。

CapsLockキーをF13に割り当てる (PowerToys Keyboard Manager)

まず、PowerToysを使ってCapsLockキーの機能を変更します

  • PowerToysを起動し、設定画面を開きます
  • 左側のメニューの「Keyboard Manager」からCapsをF13に割り当てます

F13キーを使用してEmacsキーバインドを実現する (AutoHotkey)

AutoHotkey v2を使って、F13キーと他のキーの組み合わせでEmacs風の動作を定義します

  • 以下.ahk ファイルを作成します
#Requires AutoHotkey v2.0
#SingleInstance Force
SendMode "Input"

F13 & f::Send "{Right}"    ; Forward char
F13 & b::Send "{Left}"     ; Backward char
F13 & p::Send "{Up}"       ; Previous line
F13 & n::Send "{Down}"     ; Next line
F13 & a::Send "{Home}"     ; Beginning of line
F13 & e::Send "{End}"      ; End of line

F13 & d::Send "{Delete}"   ; Delete char
F13 & h::Send "{Backspace}" ; Delete char backward
F13 & k::SendInput "+{End}{Delete}" ; Kill line
  • .ahkファイルをAutoHotKeyでコンパイルします

Source: 保存した.ahkファイル
Base File: v2.0と記載のあるAutoHotkey64.exe
に設定してConvertを押すと、Sourceのファイルと同じディレクトリに.exeファイルが爆誕します

  • Windows起動時に自動的にスクリプトを実行したい場合は、生成されたexeをスタートアップフォルダに配置してください

おわりに

これで完成です。あとはexeファイルが動いている状態で物理CapsLockキーを使用して下記動作ができるはずです

  • Caps+F: カーソルを右へ

  • Caps+B: カーソルを左へ

  • Caps+P: カーソルを上へ

  • Caps+N: カーソルを下へ

  • Caps+A: カーソルを行頭へ

  • Caps+E: カーソルを行の末尾へ

  • Caps+D: Deleteの動作(カーソルの右の文字を消す)

  • Caps+H: BackSpaceの動作(カーソルの左の文字を消す)

  • Caps+K: Kill Ring(カーソルより右の文字を行末まで全部消す)

    • ここはEmacs準拠ならば文字列のヤンクまでできますが、面倒だったので単に消すだけにしました

これだけでもEmacs風な動作が特にコンフリクトなく使えるようになるため、かなりWindows生活が快適になりました
皆さんもよいWindowsテキスト入力を!!

参考記事

こちらの記事を参考にさせていただきました、ありがとうございます!!🙇‍♂️🙇‍♂️
こちらではAutoHotkeyでヤンクまで実装しているので必要な方は是非元記事の方を参照ください

https://zenn.dev/torkralle/articles/712f13dfcb728e

Discussion