ぼくのかんがえたさいきょうのキーボード設定

# はじめに
みなさんは、普段PCのキーボードは何を使ってますか？JIS or USキーボード？またWindows or Mac？わたしは、USキーボードがカッコイイと思ってるのでUS派です。デスクトップは自作PC(Windows)で、ラップトップはM2 MacBookAirを使っています。わたしのように2つの環境を頻繁に切り替える人は多いと思います。そこで問題になってくるのがキーボード入力やショートカットの違いです。
わたしは基本的にMac環境のEmacsキーバインドとかショートカットが好きなのでこの記事では、Windows環境のキーボード設定をMac環境に近づける方法を紹介します。

https://ringo-hack.com/mac/mac-windows-keyboard-difference/

https://gg-empire.com/keyboard-layout-difference

# Emacsキーバインドとは
Emacsキーバインドとは何かというと、Emacsというエディタで使われるショートカットのことです。Mac OSではショートカットとして組み込まれています。
詳しくは以下の記事を参考にしてください。

https://qiita.com/ikemo/items/a98ad937c28cc67bb34b

# Mac OSのキーボード設定
Mac OSでは素晴らしいショートカットがいくつかあります。特に好きなショートカットに以下のものがあります。（主にEmacsキーバインド）

| コマンド | 機能 |
|----------|------|
| Control + F  | カーソルを一つ前に移動 (1文字右) |
| Control + B  | カーソルを一つ後に移動 (1文字左) |
| Control + P  | カーソルを一つ上に移動 (1行上) |
| Control + N  | カーソルを一つ下に移動 (1行下) |
| Control + A  | カーソルを行の先頭に移動 |
| Control + E  | カーソルを行の末尾に移動 |
| Control + H  | 前の文字を削除(delete) |
| Control + D  | 後の文字を削除(back space) |
| Control + Shift + J | 日本語入力へ切り替え ※1 |
| Control + SHift + ; | 英字入力へ切り替え ※1 |

カーソル移動とか削除とかよく使うコマンドがたくさんあって便利そうですよね。ですが、ここでMacのUSキーボードを見てみましょう。
![IMG_7630 2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1698242/f27fd958-3261-525f-a338-82ba9c3e70cf.jpeg)
こんなにも重要なキーなのにこんなにも押しにくいところにある！辛い...

## 解決策
Macの場合はとってもシンプル`Control`キーの場所をもっと押しやすい位置に変更すれば便利です。
オススメは"`Caps lock`を`Control`に置き換える"です。
やり方は以下の通りです。

1. システム設定>キーボード>キーボードナビゲーション>キーボードショートカット
![スクリーンショット 2024-02-12 17.08.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1698242/1eaef541-435f-6a07-38e4-1ae872712547.png)
1. キーボードショートカット>修飾キー>Caps LockをControlに変更
![スクリーンショット 2024-02-12 17.12.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1698242/96f3db74-637e-df1b-2f02-6eaf894a592b.png)

`Caps Lock`キーとかいうSQL文を書く時ぐらいしか使わないキーを潰して`Control`キーにすることでQOL爆あがり間違いなしです！
↓は実際にキー変更した後のタイピング動画です。わかりにくですが、一度も`delete`キーを触らず、まだ、スムーズにカーソル移動していることがわかります。

https://youtu.be/l7MXvyvlkxg

# Windows OSのキーボード設定
MacではデフォルトでEmacsキーバインドが使えましたが、Windowsでは使えません。しかし指はもうEmacsキーバインドを求めていますし、`Caps Lock`を書き換えた影響で日本語に切り替えたいのに、大文字アルファベットを入力してしまうようになってしまいました。
そのため、WindowsでもMacと同じようにタイピングしたいのでキー配列をソフト側で書き換えます。
書き換えソフトには[AutoHotkey](https://www.autohotkey.com/)を使用します

## 解決策
WindowsのショートカットをMac風にAutoHotkeyで書き換えます。
変更点は以下の通りです。

- Emacsキーバインド対応(一部)
- `Caps Lock`を`F13`という仮想のキーに置き換え
- `Caps Lock + Shift + j`で`かな -> 英数字`
- `Caps Lock + Shift + ;`で`英数字 -> かなの変換`

変更するためのスクリプトは以下の通りです。

```us配列.ahk
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

; かなを押したときは、全角(IME OFF)
vk1C::
imeoff:
  Gosub, IMEGetstate
  If (vimestate=0) {
    Send, {vkf3}
  }
  return

; 無変換を押したときは、半角(IME ON)
vk1D::
imeon:
  Gosub, IMEGetstate
  If (vimestate=1) {
    Send, {vkf3}
  }
  return

IMEGetstate:
  WinGet, vcurrentwindow, ID, A
  vimestate := DllCall("user32.dll\SendMessageA", "UInt", DllCall("imm32.dll\ImmGetDefaultIMEWnd", "Uint", vcurrentwindow), "UInt", 0x0283, "Int", 0x0005, "Int", 0)
  return

; Emacsキーバインドのカーソル移動設定
F13 & f::Right     ; 次の文字
F13 & p::Up        ; 前の行
F13 & n::Down      ; 次の行
F13 & b::Left      ; 前の文字
F13 & u::Left      ; 前の文字
F13 & a::HOME      ; 行の先頭に移動
F13 & e::END       ; 行の末尾に移動
F13 & d::Del       ; 文字の削除
F13 & h::BS        ; 前の文字の削除
F13 & m::Enter     ; 改行

; Caps Lockを利用したIMEの切り替え
F13 & j::
  if GetKeyState("Shift") {
    Send, {vk1C} ; Shift+CapsLock+Jでかな入力
    return
  }
  send {F6} ; CapsLock+Jでひらがなに変換
  return

F13 & `;::
  if GetKeyState("Shift") {
    Send, {vk1D} ; Shift+CapsLock+;で英数入力
    return
  }
  send {F10} ; CapsLock+;で英数に変換
  return

F13 & k::F7   ; CapsLock+Kでカタカナに変換

; Caps Lockを利用したマウス操作
F13 & c::click	; CapsLock+Cでクリック
F13 & v::click,Right	; CapsLockで右クリック

; Ctrl修飾子を利用したマウス移動
Ctrl & Up::MouseMove 0,-10,0,R		; Ctrl+↑で上にマウス移動
Ctrl & Down::MouseMove 0,10,0,R		; Ctrl+↓で下にマウス移動
Ctrl & Left::MouseMove -10,0,0,R	; Ctrl+←で左にマウス移動
Ctrl & Right::MouseMove 10,0,0,R	; Ctrl+→で右にマウス移動

; Shift修飾子を利用した大幅なマウス移動
Shift & Up::MouseMove 0,-50,0,R		; Ctrl+↑で多めに上にマウス移動
Shift & Down::MouseMove 0,50,0,R	; Ctrl+↓で多めに下にマウス移動
Shift & Left::MouseMove -50,0,0,R	; Ctrl+←で多めに左にマウス移動
Shift & Right::MouseMove 50,0,0,R	; Ctrl+→で多めに右にマウス移動

; Windowsの検索ボックスを開く
F13 & Space::#s  ; Control+SpaceでWindowsの検索ボックスを開く

```
このプログラムを[WindowsのStartup時に起動](https://www.naporitansushi.com/autohotkey-startup/)するようにすればMac風のショートカットを実装できます！

# おわりに
これでMac、Windowsをスムーズに切り替えることができますね！
しかし、他人のパソコンを触るときは癖で、何度もCapsLockキーを押しちゃうことが多発するので注意してください！

# 追記
※1 MacOSで`Control + Shift + J`, `Control + SHift + ;` で "かな"、"英字" 切り替えができない場合は
`設定>キーボード>テキスト入力>入力ソース`で英字にチェックを入れて、そのほかの入力ソースがある場合は左下のマイナスボタンを押して削除しましょう。
↓の画像のようになっていればokです。
![スクリーンショット 2025-02-05 21.04.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1698242/baf53098-e752-c296-5dcf-0ab9065c62fc.png)


# 参考

https://ringo-hack.com/mac/mac-windows-keyboard-difference/

https://gg-empire.com/keyboard-layout-difference

https://qiita.com/ikemo/items/a98ad937c28cc67bb34b

https://www.autohotkey.com/

https://www.naporitansushi.com/autohotkey-startup/

https://tex2e.github.io/blog/keyboard/ahk-mac-like-keyboard