2017/03/12 更新
当初載せてあったluaのコードだとキーリピートが効かないとのことだったので修正しました。
その他諸々変更していたので、2017/03/12現在の設定に書き換えました。
概要
KarabinerがSierraに対応していないのでアップデートせずにいたのですが、新型Macbook ProでSierraが強制されるのもあり、対応せざるを得なくなりました。
元々Karabinerに設定していたのはこれぐらい。
ほとんどErgodoxの為に設定していたもので、For Japanese
の設定はErgodox側で対応出来、問題はVi Modeのカーソル移動だけ。
そこで[KeyMove] Control_L+hjkl to Left/Down/Up/Right · Issue #103 · tekezo/Karabiner-Elementsを参考にHammerspoonを使って実現することにした。
手順
https://github.com/Hammerspoon/hammerspoon/releases/latest からzipをダウンロード、解凍してAppを/Applications配下に設置。
もしくは、brew cask install hammerspoon
でも可。私はこちらを使いました。
起動すると設定画面が表示されるので、Launch Hammerspoon at login
をオンにする。
Ctrl+hjklでカーソル移動させるだけならアクセシビリティの設定は不要
コンソールが出るがこれは無視してOK
次にメニューバーのOpen Config
を選択。
エディタが開くので、以下をコピペ。保存。
local function keyCode(key, modifiers)
modifiers = modifiers or {}
return function()
hs.eventtap.event.newKeyEvent(modifiers, string.lower(key), true):post()
hs.timer.usleep(1000)
hs.eventtap.event.newKeyEvent(modifiers, string.lower(key), false):post()
end
end
local function remapKey(modifiers, key, keyCode)
hs.hotkey.bind(modifiers, key, keyCode, nil, keyCode)
end
remapKey({'ctrl'}, 'h', keyCode('left'))
remapKey({'ctrl'}, 'j', keyCode('down'))
remapKey({'ctrl'}, 'k', keyCode('up'))
remapKey({'ctrl'}, 'l', keyCode('right'))
remapKey({'ctrl', 'shift'}, 'h', keyCode('left', {'shift'}))
remapKey({'ctrl', 'shift'}, 'j', keyCode('down', {'shift'}))
remapKey({'ctrl', 'shift'}, 'k', keyCode('up', {'shift'}))
remapKey({'ctrl', 'shift'}, 'l', keyCode('right', {'shift'}))
remapKey({'ctrl', 'cmd'}, 'h', keyCode('left', {'cmd'}))
remapKey({'ctrl', 'cmd'}, 'j', keyCode('down', {'cmd'}))
remapKey({'ctrl', 'cmd'}, 'k', keyCode('up', {'cmd'}))
remapKey({'ctrl', 'cmd'}, 'l', keyCode('right', {'cmd'}))
remapKey({'ctrl', 'shift', 'cmd'}, 'h', keyCode('left', {'shift', 'cmd'}))
remapKey({'ctrl', 'shift', 'cmd'}, 'j', keyCode('down', {'shift', 'cmd'}))
remapKey({'ctrl', 'shift', 'cmd'}, 'k', keyCode('up', {'shift', 'cmd'}))
remapKey({'ctrl', 'shift', 'cmd'}, 'l', keyCode('right', {'shift', 'cmd'}))
remapKey({'ctrl', 'alt'}, 'h', keyCode('left', {'alt'}))
remapKey({'ctrl', 'alt'}, 'j', keyCode('down', {'alt'}))
remapKey({'ctrl', 'alt'}, 'k', keyCode('up', {'alt'}))
remapKey({'ctrl', 'alt'}, 'l', keyCode('right', {'alt'}))
remapKey({'ctrl', 'shift', 'alt'}, 'h', keyCode('left', {'shift', 'alt'}))
remapKey({'ctrl', 'shift', 'alt'}, 'j', keyCode('down', {'shift', 'alt'}))
remapKey({'ctrl', 'shift', 'alt'}, 'k', keyCode('up', {'shift', 'alt'}))
remapKey({'ctrl', 'shift', 'alt'}, 'l', keyCode('right', {'shift', 'alt'}))
remapKey({'ctrl', 'cmd', 'alt'}, 'h', keyCode('left', {'cmd', 'alt'}))
remapKey({'ctrl', 'cmd', 'alt'}, 'j', keyCode('down', {'cmd', 'alt'}))
remapKey({'ctrl', 'cmd', 'alt'}, 'k', keyCode('up', {'cmd', 'alt'}))
remapKey({'ctrl', 'cmd', 'alt'}, 'l', keyCode('right', {'cmd', 'alt'}))
保存後にメニューバーのReload Config
で反映される。
参考にしたコードだけだと単純なカーソル移動しかできず、テキストの選択や先頭への移動などが出来なかったので追加分で対応してます。
まとめ
最初はmacOS Sierra でもKalabinerのvi modeでカーソル移動したい【Ctrl + h/j/k/l】 - Qiitaを参考に設定しようかとも思ったんですが、有料だったりもしたのでこちらの方法を使いました。
今回はCtrl+hjklでカーソル移動出来るようにしましたが、hjklの部分を好みに合わせて変更できるのでKarabinerが対応するまでの繋ぎとして使えそうでオススメです。