acokikoy's notes

最近気になる=[NoCode, Shopify], I am..=[Python, ウクレレ, マニュアル車, CMS] LoveなWebディレクター

トラブル解決note》Sublime Textで Command+Shift+p (コマンドパレットのショートカット)が効かなくなった

ある日突然 Sublime Textのコマンドパレットのショートカット Command+Shift+p が効かなくなって大変困った。解決方法のメモ。

コマンドパレットは、Sublime Textのキモとも言えるもので、たいていの操作はここから始まる。当然そのショートカット Command+Shift+p は最頻出キーバインドの一つなわけで、使えないと効率がた落ちって感じ。 解決したのでその方法をメモっておく。

原因と調べ方

キーバインドが効かない原因は、

  1. Sublime Text 内でコンフリクト
  2. Sublime Text 以外のアプリにそのキー操作を奪われてる

この2つのどちらか。これをまず切り分ける。

メニューから View > Show Consoleとするか、 `Ctrl+`` を押して コンソール画面を表示させる。

コンソールに、次の2行を入力(>>> はプロンプトなので入力しなくていい)

>>> sublime.log_ommands(True)
>>> sublime.log_input(True)

続いて、調べたいキーバインドの操作をする。
今回なら "Command+Shift+p" を押す。

Sublime Textがキー操作のイベントを受信すると、押されたキーとそれによりキックされたコマンド内容が表示される。

key evt: shift+super+p
command: show_overlay {"overlay": "command_palette"}

キックされたのが自分の期待する機能じゃなければ、内部のなにかとコンフリクトしている。

もしも キー操作したのに反応が返ってこないならば、
Sublime Text外のなにものか(他のアプリとか)がキー操作を奪っている可能性がある。つまり原因2の方ということになる。

1. Sublime Text内でコンフリクトしている場合

デフォルトのキーバインディングよりも、追加プラグインやカスタム設定したキーバインディングの方が優先されるらしいので、その辺りを中心に調べる。

単純な話なら、
・前述のコンソール画面の結果からわかるかもしれないし、
・基本設定 > キーバインド(日本語メニュー化している場合) で設定ファイル内にコンフリクトがないか調べてもいい。

ややこしそうなら、
FindKeyConflicts - Package Control というプラグインを入れる。コンフリクトしているキーバインドを一覧してくれるので解決が早い。

使い方:
コマンドパレットから 次を実行するとコンフリクト中のキーがパレットに一覧されるので目的のキーを選択する。

FindKeyConflicts: All Key Maps to Quick Panel:

そうすると、こんな感じで結果をテキスト出力してくれる。 下記の例だと、Ctrl+cが、デフォルトとTerminus(プラグイン)間でぶつかってる状態。

-------------
Entry Details
-------------
 [ctrl+c]
   cancel_build                             Default               
   terminus_keypress                        Terminus              [{"key": "terminus_view"}]

他にも、

などいくつか出力モードがある。結果はテキストで一覧されるのでその後が扱いやすい。

2. Sublime Text 以外のアプリにキー操作を奪われてる場合

キーが効かなくなったタイミング前後に、

をしていたらそれが怪しい。

私の場合は、 TickTick というタスク管理サービスのMac用アプリとぶつかっていた。TickTickアプリ側でこのショートカットを使うことはないのでそっちの設定を削除して対応した。

参考にした情報:

あいにく日本語の文献は見つけられなかったが、
Google先生に「sublime text command palette not work」とかなんとか聞いたら 速攻で Stack Overflow がヒットした。 "結構あるあるな" 困りごとなんだね。

Command Palette shortcut not working in Sublime Text3 - Stack Overflow

「No key event means something is stealing the key from Sublime ..」とあるのを見てすぐピンときた。助かったでちゅぅ。