VSCodeライクなショートカットキーを追加したい
最近Xcodeを使い始めました。VSCodeの方が使い慣れているため、XcodeにVSCodeのいくつかのショートカットキーがないことが不便に感じました。
もちろんショートカットキーの設定はXcodeでも行うことができます。
[Command + , ]により設定画面を表示し、該当する項目があれば、そこにショートカットキーを設定することができます。以下の画像は設定画面上のKey Bindingsを開き、設定状況を表示した画面です。

ところが、一部のショートカットキーはこの画面から設定しようにも項目自体がありません。具体的には、以下のショートカットキーです(括弧内はVSCodeのショートカットキー)。
- 上下への行移動(Command + ↑またはCommand + ↓)
- 改行+新しい行作成(Command + Enter)
この場合、まずはKey Bindingsの設定欄に項目を表示させる作業から始める必要があります。
設定項目を新たに作る
設定方法は、以下のページにまとめられている記事を参照しました。
その中では、行複製のショートカットの項目も新たに作るとしていましたが、Xcode15.3では行複製はCommand+Dによりデフォルトで利用可能なため、
- 上下への行移動(Command + ↑またはCommand + ↓)
- 改行+新しい行作成(Command + Enter)
のみを作成することにします。
IDETextKeyBindingSet.plistを編集します。以下のコマンドをターミナルで打ち込んで編集するのが簡単と思います。
subl /"Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist"
先頭を「subl」としているのはSublimeテキストエディタを利用してplistファイルを編集するためで、Sublimeをお持ちでない方は「open -a TextEdit」等お持ちのエディッタで編集するように置き換えるとよいかと思います。
内容は参照させていただいた、Xcodeでカスタムのショートカットを作る!そのままですが、行複製はXcodeのデフォルトで実装されているため、その部分のみを外します。以下をIDETextKeyBindingSet.plistに追加します。
<key>Original Direction</key>
<dict>
<key>Move Line Up Original</key>
<string>selectParagraph:, cut:, moveBackward:, moveToBeginningOfParagraph:, paste:, moveBackward:, moveToBeginningOfParagraph:</string>
<key>Move Line Down Original</key>
<string>selectParagraph:, cut:, moveToEndOfParagraph:, moveRight:, paste:, moveBackward:, moveToBeginningOfParagraph:</string>
<key>Continue Newline Original</key>
<string>moveToEndOfLine:, insertNewline:</string>
</dict>
IDETextKeyBindingSet.plistの追加する場所に注意が必要です。元のタグの組み合わせが壊れると、deleteキーで文字を削除できなくなったりとキー設定が全体的におかしくなります。
わかりやすく、もともと先頭に記載されている<dict>の下に入れてみました。追加下のは赤の四角部分です。

Xcodeを立ち上げ直して、設定画面のKey Bindingsからショートカットキーの設定を行います。
コンフリクトするキーがある場合は、該当キーを別のキーに割り当てる等によりコンフリクトがなくなるように設定し直します。最終的に以下のとおり設定し、目的のショートカットキーを機能させることができました。

追記(2024/05/18)
作業中IDETextKeyBindingSet.plistを上書きした後に、もう一回ファイルを開こうとしてもファイルに記述されているはずのテキストが何も表示されない現象が発生しました。
原因はIDETextKeyBindingSet.plistのファイルのユーザー権限にReadが付与されていない?(権限が失われた?)事が原因でした。赤枠の部分にread権限がついていればファイルの読み取りができるはずです。

IDETextKeyBindingSet.plistが保存されているディレクトリに移動し以下のコマンドで権限を付与します。

sudo chmod 754 ./IDETextKeyBindingSet.plist
ただし、このコマンドを実行したときに私の環境では、「Operation not permitted」が表示され、権限が変更できませんでした。iTermにフルディスクアクセスが付与されていないことが原因でした。以下のように権限付与したところ問題なくchmodコマンドで権限を変更できました。
