Macbookのなるべくホームポジションを維持するキーバインドについて考える
前置き
最近ずっとMacbookのキーバインドについて考えていて、現時点での自分なりの回答を用意できたのでまとめてみたいと思います。 前提として、自分は、US配列キーボード、OSがSierraのMacbook ProでiTerm2, tmux, Zsh, Vimあたりを使っているウエブケーエンジニアです(iTerm2, tmuxは特に考慮すべきキーバインドの競合がなかったけど)
各種アプリのインストール方法、設定方法等はインターネッツをご参照ください。
環境
MacBook Pro 13-inch, 2016, US配列キーボード
MacOS Sierra 10.12.5
iTerm2 3.0.15
tmux 2.5
Vim 8.0
Karabiner-Elements 0.91.8
英かな 2.2.3
やりたかったこと
なるべく指をホームポジションに維持したまま生きていきたかった。具体的には各種矢印, Esc, Delete, returnキーあたりのホームポジションから離れているキー(の機能)を複合キーにしてもいいからホームポジション近くに位置させたかった。
設定したキーバインド
下記が今回設定したキーバインド。
USキーボードなので大前提として設定したキーバインド
左コマンドキー単体で押下 -> 英数キー 右コマンドキー単体で押下 -> かなキー コロン -> セミコロン セミコロン -> コロン Caps Lockを他のキーと一緒に押下 -> Controlキーとして扱う
やりたかったキーバインド
Caps LockをContorlに変えたので下記のControlはaキーの横にあるCaps Lockを押す想定。
Control + H -> (fn)←(矢印の左) Control + J -> (fn)↓ Control + H -> (fn)↑ Control + L -> (fn)→ Control + M -> enter Control + , -> delete # Windowsでいうところのbackspace Control + . -> fowarded_delete # 同上 delete Caps Lock単体で押下 -> Escapeキー
その他(ついでに追加した設定)
Shiftキー + deleteキー -> forward delete)
必要なアプリとその設定
上記のキーバインド設定のために使用するアプリはKarabiner-Elementsと英かなの2つ。 それ以外はシステム環境設定も含めて特に設定はしていません。 それぞれのアプリの設定は下記の通り。
Karabiner-Elements
設定は画像の通りです。
英かな
設定は画像の通りです。
競合するキーバインド
上記のキーバインドを設定することによる潰れる(私の使用している)各ツールのキーバインドは下記の通り。
Zsh
$ bindkey -L (抜粋) bindkey "^H" backward-char bindkey "^J" history-substring-search-down bindkey "^K" history-substring-search-up bindkey "^L" forward-char bindkey "^M" accept-line bindkey "^[," _history-complete-newer
使用コマンドのsearchはpecoに任せているので問題なし。
Vim
$ vim :help index.txt (抜粋) 1. Insert mode CTRL-H same as <BS> CTRL-J same as <CR> CTRL-K {char1} {char2} enter digraph CTRL-L when 'insertmode' set: Leave Insert mode CTRL-M same as <CR> 2. Normal mode CTRL-H 1 same as "h" CTRL-J 1 same as "j" CTRL-K not used CTRL-L redraw screen CTRL-M 1 same as <CR> 3. Visual mode CTRL-H 2 same as <BS> 4. Command-line editing CTRL-H same as <BS> CTRL-J same as <CR> CTRL-K {char1} {char2} enter digraph CTRL-L do completion on the pattern in front of the cursor and insert the longest common part CTRL-M same as <CR>
特に問題ないように思える。
Neosnippet
Vim本体は問題なかったが、プラグインでNeosnippet(neocomplete)を利用しており 公式のキーバインド設定をそのまま流用しているので、下記の設定の移行先を考える必要がある。
imap <C-k> <Plug>(neosnippet_expand_or_jump) smap <C-k> <Plug>(neosnippet_expand_or_jump) xmap <C-k> <Plug>(neosnippet_expand_target)
候補としては<C-s>あたりが有力かなと考えている。
その他
MacOS標準IME
標準IMEの下記キーバインドが潰れる。 これは結構痛いかも、、、
Control + J -> ひらがなに変換 Control + K -> カタカナに変換 Control + L -> 全角英字に変換 Control + ; -> 英字に変換
雑感箇条書き
- 当初は英かなを使わずにKarabiner-Elementsのみで設定しようとしてcomplex_modificationsを自作すれば設定自体はできたが、Controlを押したままm/,を押してもenter/deleteが連続で押されないのを解消できなかったのでKarabiner-Elementsと英かなを併用している
- Google Chromeのアドレスバーに単語を入れてのウェブ検索だけ、標準のreturnとCtrl + m で設定したreturnの挙動が異なっていて困っている。
- 具体的には後者の場合、例えば"ほげ"と入力してキーを押すと「"ほげ"で検索」されずに「http://www.ほげ.com/」にジャンプしようとする
- Ctrl + m / , / . に設定した return / delete / forward に慣れないのでしばらく指を鳴らす必要がありそう
- あるいはキーバインドを別のものに変更するかも
以上です。
参考
tekezo/Karabiner-Elements: The next generation Karabiner for macOS Sierra
https://github.com/tekezo/Karabiner-Elements
Karabiner-Elements complex_modifications rules
https://pqrs.org/osx/karabiner/complex_modifications/
⌘英かな
https://ei-kana.appspot.com/
Shougo/neosnippet.vim: neo-snippet plugin contains neocomplcache snippets source
https://github.com/Shougo/neosnippet.vim