1. 記事一覧 >
  2. ブログ記事
Xcode
category logo

Xcode ショートカットのカスタマイズ 空行挿入・一行複製・一行削除

(更新) (公開)

はじめに

Xcode 13.4.1 にデフォルトでは設定に存在しないショートカットを追加しました。
やり方を紹介していきたいと思います。


デフォルトで存在するショートカットは、
command + ,(カンマ)Key Bindings もしくは、
XcodePreferences...Key Bindings で設定できます。



【検証環境】

macOS Monterey 12.5.1

 Xcode 13.4.1


空行挿入

control + O(オー) で下に空行を入力するショートカットを作成します。

【 O(オー)の理由 】

O が何かの頭文字だからということはありません。

vi が O で同じ意味(下に空行挿入)の動作をするからです。


Key Bindings の設定は、IDETextKeyBindingSet.plist というファイルで決まっています。これを直接編集して、設定項目を追加します。

元に戻せるように IDETextKeyBindingSet.plist.org としてバックアップしています。

このファイルは、設定項目が書かれているだけで、キーバインドの設定は別のところに保存されます。

$ sudo cp -p /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist.org
$ sudo vi /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist

以下の内容を追加します。

    <key>Custom Key Bindings</key>
    <dict>
      <key>insert new line(custom)</key>
      <string>moveToEndOfLine:, insertNewline:</string>
    </dict>

この後、IDETextKeyBindingSet.plist の変更を反映するために、Xcode の再起動が必要です。

Xcode を再起動して、
Filter のところに insert new line と入力して、
Key のところをダブルクリック → control + O
を入力します。
ここで、他のコマンドと重複しているエラーになります。


赤い × 部分をクリックすると、Conflicts に移動して、
Insert Newline and Leave Selection Before It (Insertions and Indentations) と重複していることが分かります。


Insert Newline and Leave Selection Before It (Insertions and Indentations) は、インデントが考慮されるエンターキーと異なり、完全に折り返す改行のようです。


重複している control + O をダブルクリックして、マイナスマークをクリックして、削除します。

何もしていない段階で、Conflicts を見ると、29 件の警告がありました。警告の対処は必須では無いようです。


この段階で、Customized はこうなっています。


改めて、control + O を入力してみると、以下のように空行が挿入されます。


一行複製

この記事を書いているときに気づきました。Xcode 14 Beta 3 から command + D で選択部分を複製。選択していない時は、まさにこの記事の通り、カレント行が複製されるようです。

New Features in Xcode 14 Beta 3

When editing code, the Edit > Duplicate menu item and its corresponding keyboard shortcut now duplicate the selected text — or the line that currently contains the insertion point, if no text is selected. (8614499) (FB5618491)

command + D でカレント行を下に複製するショートカットを設定します。


先ほどと同じ要領で、IDETextKeyBindingSet.plist に以下の内容を追加します。

    <key>Duplication</key>
    <dict>
      <key>Duplicate Current Line</key>
      <string>moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, moveToBeginningOfLine:, yank:</string>
    </dict>


command + D は元々存在するのですが、どういう仕様なのかいまいち分からなかったのです。command + D は反応せず、Edit - Duplicate メニューが無効になっています。(Xcode 13.4.1)


まず、これのショートカット設定 Duplicate (Edit Menu) を解除しておきます。


Xcode を再起動して、
Filter のところに duplicate current line と入力して、
Key のところをダブルクリック → command + D
を入力します。


command + D でカレント行が複製されます。


一行削除

カレント行を削除する動作の Delete line (Deletaions) があります。 初期状態の場合、何も設定されていません。


これに、control + shift + delete を設定します。

D を使いたかったですが、下記キーバインドは断念しました。

control + DDelete Forward (Deletions) (WindowsのDELキーに相当) に割り当てられているため、重複します。

command + D : 先ほど Duplicate Current Line (Duplication) に割り当てたため、重複します。

なるべくデフォルトのキーをいじらないように、何とも被らないキーをチョイスしました。


ここまでで以下の状態になりました。


control + shift + delete でカレント行が削除されます。


参考記事

あざざます。


・Xcode でも command+enter で改行したい
https://qiita.com/h-taro/items/54b686cdba60abad809b


・[Xcode]で行複製のショートカットキーを作成する方法
https://note.com/norio1629/n/n26a675b8fac7


・Xcode duplicate line
https://gist.github.com/emotality/b1bcb2bb8a07921f9c8cad1c969daedf

loading...