AtomのキーバインドがJIS配列でバグってる件について

Atomが流行ってるらしいので、vimから乗り換えようとして。

Atomvimっぽく使うやつとして、次のを入れてみた。(vimから離れなさい)

vim-mode は vim の normal/insert-mode を実現するプラグイン
ex-mode は、その名の通り、ex-mode を実現するプラグインである。

JIS配列では、ex-modeは起動しない

さて、 ex-mode を入れて「:」を押したハズなのに、何故か起動しない。
ネットの情報を便りに見ると、「shift-:」で起動するそうである。
やってみたら、あら、本当に起動した。

「これ、バグだろ!」

JIS配列では、「shift-:」=「*」である。
つまり、normal-modeで「*」による検索が行えなくなってしまう。

バグとの遭遇

色々調べた結果、原因は Atom の keymap にあった。

atom-keymap/src/helpers.coffee (2015/07/25 最新)

どうやら、keycode を見て、shift/unshift状態をハードコーディングしている。
そして、ここに書かれているのは・・・US配列である。

つまり、この挙動は Atom 側の問題であった。

迂回策

さすがにコード修正は大変なので、次のプラグインで修正したkeymapを作ることにした。

andischerer/atom-keyboard-localization

これを入れると、すぐにキーマップが「da_DK」になってしまうので、「es_ES」等に変更。
そして、次の手順で修正する。

  1. 「ctrl-shift-P」でパネル起動。
  2. 「Keyboard Localization」を入力して起動。
  3. 修正したいキーを押して、修正keymapを作る。
  4. ファイルに貼り付ける。
  5. ファイルの絶対パスを設定する。

とりあえず、即席で keymap を作ってみた。

{
    "49": {
        "shifted": 33
    },
    "50": {
        "shifted": 34
    },
    "51": {
        "shifted": 35
    },
    "52": {
        "shifted": 36
    },
    "53": {
        "shifted": 37
    },
    "54": {
        "shifted": 38
    },
    "55": {
        "shifted": 39
    },
    "56": {
        "shifted": 40
    },
    "57": {
        "shifted": 41
    },
    "186": {
        "unshifted": 58,
        "shifted": 42
    },
    "187": {
        "shifted": 43,
        "unshifted": 59
    },
    "188": {
        "shifted": 60,
        "unshifted": 44
    },
    "189": {
        "shifted": 61,
        "unshifted": 45
    },
    "190": {
        "shifted": 62,
        "unshifted": 127 //間違ってるっぽい?
    },
    "191": {
        "shifted": 63,
        "unshifted": 47
    },
    "192": {
        "shifted": 96,
        "unshifted": 64
    },
    "219": {
        "shifted": 123,
        "unshifted": 91
    },
    "220": {
        "shifted": 124,
        "unshifted": 92
    },
    "221": {
        "shifted": 125,
        "unshifted": 93
    },
    "222": {
        "shifted": 126,
        "unshifted": 94
    },
    "226": {
        "shifted": 95,
        "unshifted": 92
    }
}

これで無事、ex-mode が「:」で起動するようになった。(/・ω・)/

・・・なんか、vim に戻りたくなってきたぞ。(」・ω・)」