Atom エディタでキーバインディング設定を登録する方法

GitHub がオープンソースで提供している Atom エディタが Sublime Text と同等かそれ以上に使いやすくなってきました。

Atom は Sublime Text を参考に作られたらしく大部分はほぼ同じ使い勝手で使うことができます。 ただ、ところどころ異なるところもあり、そんなときには「 Sublime Text ならわかるんだけど・・・」と途方に暮れることがあります。

キーバインディング(キーマップ?キーボードショートカット?)の設定方法もそのひとつで、最初はぱっとわかりません。 Sublime Text での設定方法と対比させながら Atom での設定方法について書いてみたいと思います。

Sublime Text の場合

Sublime Text でキーバインディングの設定を追加するには、メニューの Sublime Text 2/3 / Preferences / Key Bindings - User を選択して Packages の User ディレクトリ下の Default (OSX).sublime-keymap というファイル( Mac の場合)が開き、この中にキーバインディングの設定を追記する形です。 書式は JSON です。

例えば「 jj 」をタイプすれば vintage mode の insert mode を脱出して normal mode に切り替える場合には次のようにします。

// Default (OSX).sublime-keymap
// for vintage mode
// jj to command mode
{ "keys": ["j", "j"], "command": "exit_insert_mode",
    "context":
    [
        { "key": "setting.command_mode", "operand": false },
        { "key": "setting.is_widget", "operand": false }
    ]
},

続いて Atom の場合です。

Atom の場合

Atom でキーバインディングの設定を追加するには、メニューの Atom / Open Your Keymap を選択して keymap.cson ファイルを開きます。 こちらはデフォルトでは ~/.atom/keymap.cson あたりに入っています。 フォーマットは cson です。

デフォルトでは次のような説明文が記入されています。

# Your keymap
#
# Atom keymaps work similarly to stylesheets. Just as stylesheets use selectors
# to apply styles to elements, Atom keymaps use selectors to associate
# keystrokes with events in specific contexts.
#
# You can create a new keybinding in this file by typing "key" and then hitting
# tab.
#
# Here's an example taken from Atom's built-in keymap:
#
# '.editor':
#   'enter': 'editor:newline'
#
# '.workspace':
#   'ctrl-P': 'core:move-up'
#   'ctrl-p': 'core:move-down'
#

このまま読めばそのとおりなのですが・・・つまり、次の書式でキーバインディング設定を追加すれば OK です。

'セレクタ':
  'キーストローク': 'コマンド'

セレクタはエディタの状態あるいはコンテキストのようなものです。 キーストロークは何らかの処理をひもづけたいキーボードの打鍵のパターン、コマンドは実際に発生させたい処理あるいはアクションです。

具体的な指示方法については Atom の Settings から Keybindings を開けばすでに設定されている一覧を確認することができるのでこれを利用しましょう。

具体的に上述の Sublime Text の場合と同様に「 jj 」で vim-mode あるいは vim-mode-plus の insert mode から脱出する設定を追加するには以下のような行を追加します。

## j j でインサートモードから脱出
## vim-mode の場合
'atom-text-editor.vim-mode.insert-mode':
 'j j': 'vim-mode:activate-normal-mode'
## vim-mode-plus の場合
'atom-text-editor.vim-mode-plus.insert-mode':
  'j j': 'vim-mode-plus:activate-normal-mode'

正しく保存できたと思ったら、実際に動作確認してもいいですし先ほどの Settings / Keybindings から確認できる登録済みキーバインディング一覧を確認してもよいでしょう。