➡️

Sublime Mergeでキーバインディングを追加する方法

2024/12/19に公開

Sublime Mergeとは

Sublime Textを開発した会社が提供するGit GUIクライアントです。軽快な動作と、インタラクティブリベースの直感的な使いやすさが特に気に入っています。中でも、コミットの順序を入れ替える操作が簡単にできるため、コミットを整理する際にめちゃくちゃ使っています。

この記事は何?

キーバインディングの設定方法は公式ドキュメントに記載されています。記法の方法自体は理解できますが、どんなコマンドが存在するのかはわからないため、そのままでは自分が欲しいキーバインディングを設定することができません。
この記事では、コマンドの調べ方と、それを元に設定を記述する方法について解説します。

コマンドの調べ方

他のドキュメントやフォーラムを調べると、次のような記述が見つかるため、ファイルの中身を確認するとコマンドが見つかります。

Packages in Sublime Merge are zip files with the extension .sublime-package or folders in user loose packages directory. Sublime Merge comes with a number of packages to provide themes, key bindings, menus and syntax definitions for highlighting code.
Sublime Merge のパッケージは、拡張子 .sublime-package の zip ファイル、またはユーザールースの packages ディレクトリ内のフォルダです。Sublime Merge にはテーマ、キーバインディング、メニュー、コードをハイライトするための構文定義を提供する多くのパッケージが付属しています。

https://www.sublimemerge.com/docs/packages#package_directories

MacOSの場合、packagesは/Applications/Sublime Merge.app/Contents/MacOS/Packages/にあります。その中で、ファイル名にDefaultとついているものがコマンドに関係しています。これらのファイルを適当な場所にコピーし、unzipして中身を確認します。

# 作業ディレクトリを作成
mkdir -p ~/tmp/sublime_merge/default_merge_sublime_package ~/tmp/sublime_merge/default_sublime_package

# コピー && unzip: Default - Merge.sublime-package 
cp /Applications/Sublime\ Merge.app/Contents/MacOS/Packages/Default\ -\ Merge.sublime-package ~/tmp/sublime_merge/default_merge_sublime_package/package
cd ~/tmp/sublime_merge/default_merge_sublime_package
unzip package

# コピー && unzip: Default.sublime-package
cp /Applications/Sublime\ Merge.app/Contents/MacOS/Packages/Default.sublime-package ~/tmp/sublime_merge/default_sublime_package/package
cd ~/tmp/sublime_merge/default_sublime_package
unzip package

unzipしたファイルに対して、メニューなどに表示してある操作のキーワードで検索します。VSCodeなどで開くと検索しやすいと思います。ここでは例としてよく使っている、コミットを下のコミットと入れ替えるMove Commit Downをgrepで検索してみます。

pwd # ~/tmp/sublime_merge
cd default_sublime_package/ # 例の見やすさのためにcdします
grep -rin -C 3 "Move Commit Up" .
./Commit.sublime-menu-59-    "command": "fixup_commits",
./Commit.sublime-menu-60-  },
./Commit.sublime-menu-61-  {
./Commit.sublime-menu:62:    "caption": "Move Commit Up",
./Commit.sublime-menu-63-    "command": "move_commit",
./Commit.sublime-menu-64-    "args": { "commit": "$commit", "down": false },
./Commit.sublime-menu-65-  },
Binary file ./package matches

Commit.sublime-menuファイルで定義されていて、コマンドがmove_commit、argsが{ "commit": "$commit", "down": false }であることがわかります。

これで任意のコマンドを調べることができるようになりました。

キーバインディングの設定方法

あとは、調べたコマンドを実際に設定するだけです。

設定は~/Library/Application\ Support/Sublime\ Merge/Packages/User/Default.sublime-keymapファイルを作成し、そこにjson5形式で記述します。
ドキュメントに記載されているとおり、keys, command、必要に応じてargscontextを設定します。
使えるキーはドキュメントを参照してください。

# キーバインディングを記述するファイルを作成
touch ~/Library/Application\ Support/Sublime\ Merge/Packages/User/Default.sublime-keymap
// 実際に使用している設定
[
  {
    // Edit Commit Message
    "keys": ["super+shift+m"],
    "command": "edit_commit"
  },
  {
    // Move Commit Up
    "keys": ["super+shift+u"],
    "command": "move_commit",
    "args": { "commit": "$commit", "down": false }
  },
  {
    // Move Commit Down
    "keys": ["super+shift+d"],
    "command": "move_commit",
    "args": { "commit": "$commit", "down": true }
  }
]

まとめ

今回は、Sublime Mergeで任意のコマンドをキーバインディングとして設定するために、コマンドの調査方法を中心に解説しました。ぜひ実際に設定してみてください。

株式会社モニクル

Discussion