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



Nプログラマです。

タイトルがちょっと複雑ですが、まぁそんな状態の対処法です。
同じ悩みで困っている方のお役に立てれば嬉しいです。

環境

アプリ名 バージョン
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 + ; => :)

本来ならこのようなウィンドウがエディタ下に表示されます。

/img/article/2019/07/08/01.jpg
表示されるはずのウィンドウ

しかしex-modeウィンドウが表示されないため、保存するコマンドの:wとかが押せない状態です。

また、隣の:のキーを押すと、ex-modeのウィンドウが表示されます。

しかしInsertモードにすると、shift + ;:が入力されるのです。

原因がはっきりと分からないですが、振る舞いを見ているとモードによってキーイベントがJISUSのキーイベントとして処理されているようです。

対応

ということで、暫定の対応としてキーバインドを設定することで対応することにします。

Atomで押したキーのイベントを調べるため、Key Binding Resolver(Cmd + .)を起動します。

これでキーイベントを見てみると、shift + ;+となっているのでJISのキーイベントとして飛んできているのが確認できました。

/img/article/2019/07/08/02.jpg
Key Binding Resolver

キーを置き換えるには+をex-modeを開くコマンドに置き換えてあげればよさそうです。

置き換えるには、以下のようにkeymap.csonに記述します。
キーバインドの設定を開くには、設定 > Keybindings > your keymap fileとクリックすれば、keymap.csonを開くことができます。

keymap.cson コードを開く
keymap.cson

'atom-text-editor.vim-mode-plus:not(.insert-mode)':
  '+': '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キーボードを使えば問題ないのでは?と思ったり思わなかったり。。。

それでは、このへんで。
バイナリー!