ショートカットは覚えるものではなく、作るもの autohotkey編

## はじめに
windowsにて日本語キーボードを使っている方々対象の記事です。
`無変換、変換`キーは最高のポジションにいるにも関わらず、全く仕事をしていません。

また、例えば矢印キーの移動てホームポジションから離れて打つか、小指で打たなければいけません。（これ指の健康に悪いです）

`ctrl tab` などももはや人間の手の動きではないくらい曲げなければ打てません。。

なので今回は`無変換、変換 + キー`に日々の基本動作を割り当てましょうという話です。

`無変換 + ijkl` で `矢印キー上下左右`
`変換 + u or o` で `ctrl tab or ctrl shift tab`

を実現します。 

autohotkeyを導入します。

ダウンロード
https://www.autohotkey.com/

## autohotkey script

すぐコピペできるようにしています。
気に入らない箇所は修正したらOKです。

こちらにも上げています。
https://github.com/kou0123/dotfiles

```config:shortcut.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.

;========vk1D(無変換)===========
; ---十字キーの設定、enter backspace------
vk1D & i::Send,{Blind}{Up}
vk1D & j::Send,{Blind}{Left}
vk1D & k::Send,{Blind}{Down}
vk1D & l::Send,{Blind}{Right}
vk1D & u::Send,{Blind}{BS}
vk1D & o::Send,{Blind}{ENTER}

; ---- テキスト編集系------
vk1D & w::Send,{Blind}{End}+{Home}{BS}
vk1D & r::Send,{Blind}{End}+{Home}^{c}
vk1D & e::Send,{Blind}{End}+{Home}^{x}
vk1D & s::Send,{Blind}+{home}
vk1D & f::Send,{Blind}+{End}
vk1D & d::Send,{Blind}{End}{Enter}

;「無変換+上段キー」でファンクションキーの動作をさせる
vk1D & 1::Send,{Blind}{F1}
vk1D & 2::Send,{Blind}{F2}
vk1D & 3::Send,{Blind}{F3}
vk1D & 4::Send,{Blind}{F4}
vk1D & 5::Send,{Blind}{F5}
vk1D & 6::Send,{Blind}{F6}
vk1D & 7::Send,{Blind}{F7}
vk1D & 8::Send,{Blind}{F8}
vk1D & 9::Send,{Blind}{F9}
vk1D & 0::Send,{Blind}{F10}
vk1D & -::Send,{Blind}{F11}
vk1D & ^::Send,{Blind}{F12}


;========vk1C(変換)===========

;tab移動など
vk1C & o::Send,{Blind}^{Tab}
vk1C & u::Send,{Blind}^+{Tab}
vk1C & l::AltTab
vk1C & j::ShiftAltTab
vk1C & n::Send,{Blind}!{Left}
vk1C & ,::Send,{Blind}!{Right}
vk1D & vk1C::Send,{Blind}{vkF3sc029}


;sandSの設定
Space Up:: Send, % "{Shift Up}" (A_TimeSincePriorHotkey < 200 ? " " : "")
+Space:: Send, +{Space}
Space:: RShift
```

##機能の説明

### おまじない

- これはとりあえず書いておいてください。

```conf
#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.
```

### 基本
- `無変換+i`を`矢印上`にしたい場合です。
- `vk1D&i`は`無変換キー+i`を意味します。`Send,{Blind}{up}`は`矢印上`に割り当てるを意味します。

```
vk1D & i::Send,{Blind}{Up}
```

### 無変換(十字キーかつenter backspace) 

- `無変換 + ijkl`に`矢印キー上下左右`を割り当てています。
- vimライクな動きを実現できます。個人的に割当は`hjkl`より`ijkl`の方が好きなので、こうしています。お好きな方にカスタマイズしてみてください。
- もうホームポジションから指をはなす事なく、爆速な動きが可能になります。

```conf
vk1D & i::Send,{Blind}{Up} 
vk1D & j::Send,{Blind}{Left} 
vk1D & k::Send,{Blind}{Down}
vk1D & l::Send,{Blind}{Right}
```

- こちらもかなり便利です。よく使う`BS`、`ENTER`を指をはなす事無く打てるのでかなり早くなります。

```conf
vk1D & u::Send,{Blind}{BS}
vk1D & o::Send,{Blind}{ENTER}
```

### 無変換　 テキスト編集系

- `{End}+{Home}`にて`一行選択`をしています。`+`は`shift`の意味です。
- 上から、一行削除、一行コピー、一行切り取りが可能になります。`^`は`ctrl`の意味です。

```config
vk1D & w::Send,{Blind}{End}+{Home}{BS}
vk1D & r::Send,{Blind}{End}+{Home}^{c}
vk1D & e::Send,{Blind}{End}+{Home}^{x}
```

- `+{home}`は`shift home`です。文頭まで選択です。
- `+{End}`は`shift end`です。文末まで選択です。

```config
vk1D & s::Send,{Blind}+{home}
vk1D & f::Send,{Blind}+{End}
```

- 下に一行挿入です。ソースコード書いてる人は地味に便利かも。

```config
vk1D & d::Send,{Blind}{End}{Enter}
```

###「無変換+上段キー」でファンクションキーの動作をさせる

- `無変換キー+2`などはよく使いますね。
- eclipseなどでは`無変換+3 or 4` も多用しますが、キー間が近いのでストロークが少なく済みます。

```config
vk1D & 1::Send,{Blind}{F1}
vk1D & 2::Send,{Blind}{F2}
vk1D & 3::Send,{Blind}{F3}
vk1D & 4::Send,{Blind}{F4}
vk1D & 5::Send,{Blind}{F5}
vk1D & 6::Send,{Blind}{F6}
vk1D & 7::Send,{Blind}{F7}
vk1D & 8::Send,{Blind}{F8}
vk1D & 9::Send,{Blind}{F9}
vk1D & 0::Send,{Blind}{F10}
vk1D & -::Send,{Blind}{F11}
vk1D & ^::Send,{Blind}{F12}
```
 
### 変換 tab移動系

- `^`は`ctrl`の意味です
- `ctrl tab` , `ctrl shift tab`を実現します。
- ホームポジションから離れることもなく、かなり使えます。

```config
vk1C & o::Send,{Blind}^{Tab}
vk1C & u::Send,{Blind}^+{Tab}
```

- `alt tab` , `alt shift tab`を実現します。
- 上の`ctrl tab`と組み合わせることで、爆速アプリ切り替えが可能になります。

```config
vk1C & l::AltTab
vk1C & j::ShiftAltTab
```

- `!`は`alt`です。
- 戻る、進むを実現します。
- ブラウジングがかなり早くなります。

```config
vk1C & n::Send,{Blind}!{Left}
vk1C & ,::Send,{Blind}!{Right}
```

- `無変換` を打ってから、`変換` で、`日本語/英数`切り替えを実現します。
- これも結構使えます。

```config
vk1D & vk1C::Send,{Blind}{vkF3sc029}
```

- sandSです。スペース長押しすると、スペースがシフトの役割を担います。
- `space` `s` で `S`など打てるようになります。
- 文字を打っているときに、特に動かさずに大文字が入力できるようになり便利です。


``` config
Space Up:: Send, % "{Shift Up}" (A_TimeSincePriorHotkey < 200 ? " " : "")
+Space:: Send, +{Space}
Space:: RShift
```

## 最後に
- 慣れると、早すぎだろと言われるようになります。離れられなくなるリスクはありますが笑
- 親指を無変換、変換においておくことで特に指を動かさず、様々な動きを実現することができます。
- 不具合が生じた場合は、一旦起動を停止すると治ります。