2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AutoHotKey v2 を使って WindowsでmacOSのEmacs風キーバインドを設定する

Last updated at Posted at 2024-12-06

macOSからWindowsにPCを切り替えた時に一番苦労したのがキーバインドだったので、慣れ親しんだmacOSのEmacs風キーバインドをAutoHotKeyで設定するための備忘録になります。

AutoHotkey(AHK)は、Windows上で動作するOSSのスクリプト言語およびユーティリティソフトウェアです。ユーザーは、キーボードやマウスの操作を自動化し、ホットキーやホットストリングを設定することで、作業効率を向上させることができます。具体的な機能として、キー操作のカスタマイズ、マクロの作成、特定の文字列入力時の自動変換などが挙げられます。これらの機能により、日常のPC操作を効率化し、生産性を高めることが可能になります。

ゲームをプレイされる方
一部のゲームではAHKが起動しているとプレイできないゲームがあるようなので、ゲームの起動が失敗した際にAHKを落としてみてください

設定方法

v1.1はdeprecatedになっているので、v2.0を使用します。

以下が作成した設定ファイル(スクリプト)になります。AltキーをOptionキーのようにも使いたかったので、一部Emacsとは関係ない設定も混ざっています。

また、set_ignore_applications()で除外したいアプリケーションを指定しています。
対象アプリケーションの情報を調べるには Windows Spy を利用します。

  1. タスクトレイにあるAutoHotKeyのアイコンを右クリックをし、Window Spyを選択
    image.png

  2. 対象のアプリケーションをマウスでフォーカス(Activeに)して情報を確認
    image.png

設定スクリプト

set_ignore_applications() {
  GroupAdd "IgnoreApplications", "ahk_class CASCADIA_HOSTING_WINDOW_CLASS" ; Windows Terminalを除外
  GroupAdd "IgnoreApplications", "ahk_exe Code.exe" ; Visual Studio Codeを除外
  GroupAdd "IgnoreApplications", "ahk_exe Cursor.exe" ; Cursor AI Editorを除外
}

main() {
  ListLines 0 ; スクリプト実行中のライン表示を無効化

  SetControlDelay 0 ; コントロールへのコマンド送信の遅延を最小化
  SetKeyDelay -1 ; キー入力の遅延を無効化
  SetWinDelay 0 ; ウィンドウ関連コマンドの遅延を無効化
  SendMode "Input" ; キー入力モードを設定

  set_ignore_applications() ; 除外するアプリケーションを設定
}

main()
#UseHook ; フックを使用するように設定

;; <ctrl>+F1でスクリプトを一時停止/再開
#SuspendExempt
^F1::Suspend
#SuspendExempt False

#HotIf not WinActive("ahk_group IgnoreApplications") ; 除外したアプリケーションではホットキーを無効化

;
; <ctrl>b - カーソルを左に移動
;
^b:: Send "{Left}"

;
; <shift><ctrl>b - カーソルを左に移動(文字を選択)
;
+^b:: Send "+{Left}"

; <ctrl+f> - カーソルを右に移動
^f::Send "{Right}"

; <shift+ctrl+f> - カーソルを右に移動(文字を選択)
+^f::Send "+{Right}"

; <ctrl+p> - カーソルを上に移動
^p::Send "{Up}"

; <shift+ctrl+p> - カーソルを上に移動(文字を選択)
+^p::Send "+{Up}"

; <ctrl+n> - カーソルを下に移動
^n::Send "{Down}"

; <shift+ctrl+n> - カーソルを下に移動(文字を選択)
+^n::Send "+{Down}"

; <ctrl+d> - カーソル右の文字を削除
^d::Send "{Del}"

; <ctrl+h> - カーソル左の文字を削除(Backspace)
^h::Send "{BS}"

; <ctrl+a> - 現在の行の先頭にカーソルを移動
^a::Send "{Home}"

; <shift+ctrl+a> - 現在の行の先頭までカーソルを移動(文字を選択)
+^a::Send "+{Home}"

; <ctrl+e> - 現在の行の末尾にカーソルを移動
^e::Send "{End}"

; <shift+ctrl+e> - 現在の行の末尾までカーソルを移動(文字を選択)
+^e::Send "+{End}"

; <shift+alt+f> - カーソルを単語単位で右に移動(文字を選択)
+!f::Send "+^{Right}"

; <ctrl+k> - カーソルから行末まで削除
^k::
{
    Send "{ShiftDown}{End}{ShiftUp}"
    Sleep 50 ; 遅延
    Send "{Del}"
    Return
}

; <ctrl+u> - カーソルから行頭まで削除
^u::
{
    Send "{ShiftDown}{Home}{ShiftUp}"
    Sleep 50 ; 遅延
    Send "{Del}"
    Return
}

; <ctrl+m> - 改行を挿入(Enter)
^m::Send "{Enter}"

; <alt+f> - 検索ダイアログを開く
!f::Send "^f"

; <alt+a> - すべてのテキストを選択
!a::Send "^a"

; <alt+c> - 選択したテキストをコピー
!c::Send "^c"

; <alt+x> - 選択したテキストをカット
!x::Send "^x"

; <alt+v> - クリップボードのテキストを貼り付け
!v::Send "^v"

; <alt+s> - 現在のドキュメントまたはファイルを保存
!s::Send "^s"

; <alt+n> - 新しいウィンドウを開く
!n::Send "^n"

; <alt+t> - 新しいタブを開く
!t::Send "^t"

; <alt+w> - 現在のタブを閉じる
!w::Send "^w"

; <alt+r> - 現在のページまたはドキュメントを再読み込み
!r::Send "^r"

; <alt+l> - ブラウザのURLバーにフォーカス
!l::Send "^l"

参考

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?