Skip to content

Instantly share code, notes, and snippets.

@emotality
Last active August 20, 2025 18:31
Show Gist options
  • Save emotality/b1bcb2bb8a07921f9c8cad1c969daedf to your computer and use it in GitHub Desktop.
Save emotality/b1bcb2bb8a07921f9c8cad1c969daedf to your computer and use it in GitHub Desktop.
Xcode - Duplicate Line key binding

NOTE (2022-07-09): Xcode finally added this functionality in Xcode 14, please see release notes here:

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)


Xcode line duplicate

Bind keys to duplicate lines in Xcode

  1. Close Xcode

  2. Open below directory in Finder with Cmnd + Shift + G

/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/
  1. Open IDETextKeyBindingSet.plist with a text editor.

  2. Add this in:

<key>Duplication</key>
<dict>
    <key>Duplicate Current Line</key>
    <string>moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, moveToBeginningOfLine:, yank:</string>
    <key>Duplicate Lines</key>
    <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string>
    <key>Delete Line</key>
    <string>selectLine:, deleteBackward:</string>
</dict>
  1. Open Xcode and go to Xcode preferences -> Key Bindings -> Text tab -> Scroll till you see Duplication

  2. Click on Duplicate Current Line, add a shortcut for it, eg. Cmnd + D (remove any other bindings for this key)

@jahirvidrio
Copy link

I found that the original sequence can add extra steps to the undo history (CMD + Z). Xcode actually has a native duplicate: command that does the same thing in a single step, keeping the undo history cleaner.

Using duplicate:, I was also able to recreate VS Code’s “Copy Line Up” with just:

selectLine:, duplicate:, moveUp:, moveToEndOfLine:

<key>Edit menu (ext)</key>
<dict>
    <key>Duplicate current line up</key>
    <string>selectLine:, duplicate:, moveUp:, moveToEndOfLine:</string>
    <key>Duplicate current line down</key>
    <string>selectLine:, duplicate:, moveToEndOfLine:</string>
    <key>Delete Line</key>
    <string>selectLine:, deleteBackward:</string>
</dict>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment