しふみんのブログ

しふみんのブログです。

Macbookのなるべくホームポジションを維持するキーバインドについて考える

前置き

最近ずっとMacbookキーバインドについて考えていて、現時点での自分なりの回答を用意できたのでまとめてみたいと思います。 前提として、自分は、US配列キーボード、OSがSierraMacbook 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

設定は画像の通りです。

f:id:shifumin:20170720224929p:plain

英かな

設定は画像の通りです。

f:id:shifumin:20170720224936p:plain

競合するキーバインド

上記のキーバインドを設定することによる潰れる(私の使用している)各ツールのキーバインドは下記の通り。

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