ここでは AquaSKK で発生した問題と解決方法を記載します。他の SKK ライクな IM などについては検証していません。
問題
SKK の利用において、最も頻繁に使う機能の1つに「キャンセル」がある。デフォルトでは「キャンセル」は ESC
あるいは Ctrl+G
に割り当てられている。
一方、Sublime Text 3 では Ctrl+G
は行番号指定ジャンプに割り当てられている。 Sublime Text は自身のアプリケーション内でのキーバインド設定を優先するため、 SKK 側の Ctrl+G
(キャンセル)が効かない。
解決方法
まず、 default キーマップ用のファイルを作成する。
$ touch ~/Library/Application` Support/Sublime\ Text\ 3/Packages/Default/Default\ \(OSX\).sublime-keymap
次に、 default のキーマップを開く。
Preferences -> Key Bindings - Default
このキーマップの内容を先程作成した Default (OSX).sublime-keymap
というファイルにコピーする。
最後に、 Default (OSX).sublime-keymap
をエディタで開き、以下の行を削除(もしくは他のキーに変更)する。
{ "keys": ["ctrl+g"], "command": "show_overlay", "args": {"overlay": "goto", "text": ":"} },
変更する場合は "ctrl+g"
の部分を変更すれば良いが、複数キー入力の1つ目を "ctrl+g"
にしてはならない。
ダメな例)["ctrl+g", "ctrl+l"]
解説
問題を解決したいだけの人はここまでで十分である。以下に上記解決方法の詳細を解説する。
この手の問題に対して検索して出てくる方法として、 Sublime Text 3 の user のキーマップ上で Ctrl+G
を無効にする、というものがある。
[
{ "keys": ["ctrl+g"], "command": "unbound" }
]
この設定を行うことで、 Ctrl+G
を押しても行番号指定ジャンプのためのオーバーレイは表示されなくなる。しかし、 SKK 側には Ctrl+G
は伝達されない。依然、キーマップ上でその入力は Sublime Text のものとして登録されているためだ。
そこで、 user のキーマップに追加するのではなく、 default のキーマップ上から Ctrl+G
を削除することにする。これによって、 Gtrl+G
は Sublime Text 上で握り潰されず、 SKK まで到達されるようになる。
ただ、 Sublime Text 3 では default のキーマップを表示することはできるが、そのまま編集することはできない(そもそも所定のディレクトリに対象のファイルが存在しない)。
そのため、所定のディレクトリに自らファイルを作り、 default のキーマップの内容をそのままコピーする必要がある。そうすれば、作成したファイルを参照するようになるので、編集も可能だ。やり方は既に書いた。