[Atom] JISからUS配列にしている時、ex-modeをコロンで起動できない時の対処法(キーバインド)

Nプログラマ(@Nprog128)です。
タイトルがちょっと複雑ですが、まぁそんな状態の対処法です。
同じ悩みで困っている方のお役に立てれば嬉しいです。
環境
アプリ名 | バージョン |
---|---|
Mac OS X High Sierra | 10.13.6 |
Atom | 1.38.2 |
Karabiner-Elements | 12.5.0 |
キーボードはJIS配列(HHKB)を使っており、Karabiner-Elementsを使ってMacの環境設定からUS(ANSI)配列として設定しています。
ちょっと変わった使い方かもしれないですが、これでJISキーボードをUS配列っぽく使っています。
Atomについては、Vimっぽく使うために以下のパッケージをインストールしました。
- vim-mode-plus
- ex-mode
起きている問題
先程の環境下でAtomを起動しNormalモードの時、ex-modeを使おうと:(shift+;)を押すとex-modeのウィンドウが表示されません。
(US配列に変更しているためshift + ; => :)
本来ならこのようなウィンドウがエディタ下に表示されます。

しかしex-modeウィンドウが表示されないため、保存するコマンドの:wとかが押せない状態です。
また、隣の:のキーを押すと、ex-modeのウィンドウが表示されます。
しかしInsertモードにすると、shift + ;で:が入力されるのです。
原因がはっきりと分からないですが、振る舞いを見ているとモードによってキーイベントがJISやUSのキーイベントとして処理されているようです。
対応
ということで、暫定の対応としてキーバインドを設定することで対応することにします。
Atomで押したキーのイベントを調べるため、Key Binding Resolver(Cmd + .)を起動します。
これでキーイベントを見てみると、shift + ;は+となっているのでJISのキーイベントとして飛んできているのが確認できました。

キーを置き換えるには+をex-modeを開くコマンドに置き換えてあげればよさそうです。
置き換えるには、以下のようにkeymap.csonに記述します。
キーバインドの設定を開くには、設定 > Keybindings > your keymap fileとクリックすれば、keymap.csonを開くことができます。
keymap.cson コードを開く
1'atom-text-editor.vim-mode-plus:not(.insert-mode)':
2 '+': 'ex-mode:open'
この記述を追加し、保存すればすぐに反映されます。
これでNormalモードの時、コロンを押すことによりex-modeを開くことができます。
考察(間違っているかも)
ex-modeのソースコードを見てみると、keymaps/ex-mode.csonでキーバインドを設定して処理を呼び出しているだけのようなので、原因があるのはAtomのキーイベントの処理する部分なのかな、と思っています。
もしくは、Karabiner-ElementsでUS配列に設定する部分に問題があるかもしれません。
しかしUS配列に切り替えるのはOSの機能なので、可能性としては低いと思っています。
おわりに
今回は、Atomで JISキーボードをUS配列にしている時、ex-modeをコロンで起動できない時の対処法、という内容でした。
実はこの問題をすぐに解決できなくて2ヶ月放置して、その間にVSCodeに乗り換えています。
やっと問題が解決したので、安心してAtomに戻ることができます。
いやー、ヨカッタ!良かった!
…USキーボードを使えば問題ないのでは?と思ったり思わなかったり。。。
それでは、このへんで。
バイナリー!