Xcode duplicate/delete line
Asked Answered
B

22

131

Coming from Eclipse and having been used to duplicate lines all the time, it's pretty strange finding out that Xcode has no such function. Or does it?

I know it's possible to change the system wide keybindings but that's not what I'm after.

Bonds answered 15/2, 2009 at 18:43 Comment(4)
possible duplicate of Xcode: Delete line hot-keyBatrachian
this setup Works for 9.2 https://mcmap.net/q/130435/-xcode-duplicate-lineBrynn
I'm continuously impressed with how bad XCode is given how much development Apple puts into itFlexuosity
As in answered in https://mcmap.net/q/130435/-xcode-duplicate-line Xcode finally added this functionality in Xcode 14 using ⌘ + D, [please see the release notes here)[developer.apple.com/documentation/xcode-release-notes/…Bennion
W
93

The whole point is NOT to use the Cmd-C/Cmd-V shortcuts. I have the same issue coming from IntelliJ, and being able to just duplicate lines with Cmd-D and delete them with Cmd-Y is a big time saver.

It's been bugging me ever since. However, it looks like someone else has found a solution that works.

In short, create a file ~/Library/KeyBindings/PBKeyBinding.dict with the following content and restart Xcode.

{
    "^$K" = (
        "selectLine:",
        "cut:"
    );

    "^$D" = (
        "selectLine:",
        "copy:",
        "moveToEndOfLine:",
        "insertNewline:",
        "paste:",
        "deleteBackward:"
    );
}

This will create two shortcuts: Ctrl-Shift-K for deleting the current line and Ctrl-Shift-D for duplicating the current line. Please note that this will only work if you are NOT using a custom key binding set in Xcode. Switch to "XCode Default" and things should work. Tested on XCode 3.2 on Snow Leopard.

More information on Mac OS X key bindings: http://funkworks.blogspot.it/2013/03/republishing-of-wwwerasetotheleftcompos.html

Wilsonwilt answered 4/10, 2009 at 14:8 Comment(6)
This should be the real answer. Btw - if you want to import the cmd-d (delete line) shortcut from Eclipse, you'll have to first change the Add Bookmark shortcut under the edit menu in XCodeIllustration
@joshperry, anything that works with Xcode 4+? The Duplicate command (in Edit -> Duplicate) seems to be "always" grayed out (and not meant for duplicating line).Lymphangitis
I've used OS X since day one and never knew about key bindings. what a cool feature. Take a look at this very nice GUI key bindings editor I happened upon.Selfridge
Found more information on Apple's developer site.Yester
sounded great, but seems like it didnt work for me in Xcode 5.0.2 :(Janycejanyte
For XCode 10.1, I had to use the following sequence of commands (for "^$D"): moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, setMark:, moveToBeginningOfLine:, selectToMark:, yank:Limbourg
B
111

To delete a line: Ctrl-A to go to the beginning of the line, then Ctrl-K to delete it, and another time Ctrl-K to remove the empty line. (I do not use Xcode very often, but I'm used to that in Emacs and other text inputs with Emacs-like bindings, and it seems to work in Xcode too.)

And to duplicate a line: I don't know of many programs that have a command for that, but usually I just use Copy+Paste - in Xcode it's CUA-like: Ctrl+A to go to the beginning of the line, Shift+ to select it, Command+C to copy and Command+*V to paste twice (once overriding the line and once appending to it).

(from a person that types and edits text all the time, so often in different programs, and occasionally gets pissed at having to distract himself with a dumb widget while making a little correction in a text input, that he just cannot avoid remembering these sequences and habits)

Beautician answered 15/2, 2009 at 18:50 Comment(3)
This will work in all applications using Cocoa for text input, since its a feature of the Cocoa Text System. There are many more shortcuts like this, a list of them can be found here: hcs.harvard.edu/~jrus/Site/System%20Bindings.html :)Pretender
'yank' should be ctrl + Y on modern Macs.Equation
Command-V to paste it and re-indent. Control-Y will also paste but not re-indent the pasted text.Incept
W
93

The whole point is NOT to use the Cmd-C/Cmd-V shortcuts. I have the same issue coming from IntelliJ, and being able to just duplicate lines with Cmd-D and delete them with Cmd-Y is a big time saver.

It's been bugging me ever since. However, it looks like someone else has found a solution that works.

In short, create a file ~/Library/KeyBindings/PBKeyBinding.dict with the following content and restart Xcode.

{
    "^$K" = (
        "selectLine:",
        "cut:"
    );

    "^$D" = (
        "selectLine:",
        "copy:",
        "moveToEndOfLine:",
        "insertNewline:",
        "paste:",
        "deleteBackward:"
    );
}

This will create two shortcuts: Ctrl-Shift-K for deleting the current line and Ctrl-Shift-D for duplicating the current line. Please note that this will only work if you are NOT using a custom key binding set in Xcode. Switch to "XCode Default" and things should work. Tested on XCode 3.2 on Snow Leopard.

More information on Mac OS X key bindings: http://funkworks.blogspot.it/2013/03/republishing-of-wwwerasetotheleftcompos.html

Wilsonwilt answered 4/10, 2009 at 14:8 Comment(6)
This should be the real answer. Btw - if you want to import the cmd-d (delete line) shortcut from Eclipse, you'll have to first change the Add Bookmark shortcut under the edit menu in XCodeIllustration
@joshperry, anything that works with Xcode 4+? The Duplicate command (in Edit -> Duplicate) seems to be "always" grayed out (and not meant for duplicating line).Lymphangitis
I've used OS X since day one and never knew about key bindings. what a cool feature. Take a look at this very nice GUI key bindings editor I happened upon.Selfridge
Found more information on Apple's developer site.Yester
sounded great, but seems like it didnt work for me in Xcode 5.0.2 :(Janycejanyte
For XCode 10.1, I had to use the following sequence of commands (for "^$D"): moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, setMark:, moveToBeginningOfLine:, selectToMark:, yank:Limbourg
H
78

Delete a line like eclipse CTRL+D (tested on Xcode 4.5.1) :

First of all, change these rights :

sudo chmod 666 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist

sudo chmod 777 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/

Open /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist with Xcode himself and add this new entry :

deleteToBeginningOfLine:, moveToEndOfLine:, deleteToBeginningOfLine:, deleteBackward:, moveDown:, moveToBeginningOfLine:

enter image description here

Restart Xcode and open Xcode > Preferences > KeyBindings. Find your macro and define a shortkey :

enter image description here

Hadj answered 24/10, 2012 at 12:50 Comment(9)
If you want to add a way to Duplicate a line, do the same, but when pasting the new value in the IDETextKeyBindingSet.plist file, paste this code "selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:".Clavier
+1 This solution worked but in Xcode 4.6.1 ^D conflicted with other existing key bindings.Pentangular
How can you get that for 'Duplicate current line'?Tinytinya
This is not working in xcode 6. Only first function is called from the listModish
I love it, works like a charm for me under XCode 6.3.1.Sapsucker
This is the right answer! easy and works like a charm!Slovene
Delete Line works in Xcode 8.3.2 but there is an audible beep after executing the command. How do you get rid of that?Newspaperman
For XCode 10.1, I had to use the following string: moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, setMark:, moveToBeginningOfLine:, selectToMark:, yank:Limbourg
Is there a way to make this duplicate the entire line, even if it's wrapped multiple times? Longer lines of code will only get until the end of the line with the line number and any wrapped code will not be duplicatedVacancy
P
9

I tried the key bindings solution, but it I couldn't get it to work. However editing my XCode key bindings works like a charm. Here's how I made it.

This solution does not alter the contents of the Clipboard!

Open the XCode Key Bindings:

alt text

In the Edit User Scripts Dialog:

  1. Duplicate the "Move Line Down" script and rename it
  2. Duplicate the "Move Line Down.scpt" file, rename the script, select file via (double click) in Script Editor
  3. Edit the script (Opens "AppleScript Editor") and remove the "delete (paragraphs startLine through endLine)" passage.
  4. If you do not want to restart XCode, you seem to have to remove and re-add the script. Be sure that you have "Output" set to "Discard Output", otherwise you will have a "(null)" in your source file
  5. I slightly modified the scripts a little bit more to have the right lines selected:

Duplicate Line Up:

using terms from application "Xcode"
tell first text document
    set {startLine, endLine} to selected paragraph range

    if startLine > 1 then
        set theText to (paragraphs startLine through endLine)
        set theText to (theText as string)
        make new paragraph at beginning of paragraph (startLine) with data theText
        set selected paragraph range to {endLine + 1, endLine + endLine - startLine + 1}
    else
        beep 1
    end if
end tell
end using terms from

Duplicate Line Down:

using terms from application "Xcode"
tell first text document
    set {startLine, endLine} to selected paragraph range
    if endLine < (count paragraphs) then
        set theText to (paragraphs startLine through endLine)
        set theText to (theText as string)
        (* delete (paragraphs startLine through endLine) *)
        make new paragraph at beginning of paragraph (endLine + 1) with data theText
        set selected paragraph range to {startLine, endLine}
    else
        beep 1
    end if
end tell
end using terms from

alt text

Purview answered 27/10, 2010 at 10:13 Comment(1)
Not mentioned clearly above, there are existing scripts for Delete Line, Move Line Up, and Move Line Down. The accepted answer has the drawback that it only works if you have your keybindings set to XCode Default. Using scripts lets you keep your customized keybindings, since the keybindings for scripts are handled separately from those for the rest of XCode.Chromium
D
7

OK, so I had this working for a while and then suddenly it broke. Now I have combined from different posts here and found a solution that works for XCode 6.3.1.

  1. Go to /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/ with Finder.

  2. find the folder named Resources. Right Click it, press Get Info, unlock the sharing & permissions setting (By pressing the lock) and set it to Read & Write for all.

  3. Enter the folder and find the file IDETextKeyBindingSet.plist. Right Click it, press Get Info, unlock the sharing & permissions setting (By pressing the lock) and set it to Read & Write for all.

  4. Open the file with XCode (Default)

  5. Find deletions, right click and add a new row. Name it for example Delete Line. In the value field, type: selectLine:, deleteBackward: . (This can also be done for duplicate line: selectLine:,copy:,moveToEndOfLine:,insertNewline:,paste:,deleteBackward:)

  1. Start XCode, go to preferences / keybindings and search for Delete Line. Set shortcut. Enjoy.
Dunkle answered 21/5, 2015 at 13:9 Comment(0)
E
7

To Delete Line in Xcode 10.1, please follow the steps of below screenshot to add a shortcut key.

enter image description here

Excitant answered 29/11, 2018 at 11:37 Comment(0)
V
6

As Xcode 4 makes this difficult to implement using key bindings, I have resorted to using Keyboard Maestro (Quickeys should work well too, but it's not fully Lion compatible). For e.g., here is my Keyboard Maestro shortcut (bound to ⌘-⇧-D):

http://bit.ly/thC6yf

Varini answered 20/11, 2011 at 17:6 Comment(2)
"Buy now for $36" ... what a steal ) lol... until I saw this on the Maestro site, I thought it might be a good solutionAerometer
@ycomp, here's a free solution.Lymphangitis
H
5

I know that this thread is quite old but I found another solution using BetterTouchTool, you can execute the Ctrl+A, Ctrl+K, Ctrl+K sequence in one shortcut by configuring like this in BTT:

enter image description here

(Use the Attach Additional Action Button to append the second and third shortcut)

PS: Coming from Eclipse where Cmd+D is delete line ^^

Hypso answered 18/2, 2015 at 23:12 Comment(0)
P
5

We are on Xcode 9.0 and the keybindings are still not working. Sigh.

I found this gist very helpful so reposting it here for future reference:

  1. Open /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
  2. Add the following XML snippet to this file just above the bottom </dict>
  3. Go to Xcode preferences -> Key Bindings -> Text tab -> Scroll till you see Duplication
  4. Click on Duplicate Current Line, add a shortcut for it, eg. Cmnd+D (resolve any duplicate bindings)
  5. Open Xcode

<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>

Peculation answered 17/10, 2017 at 9:11 Comment(1)
It says: this file is file lockedCytoplast
S
4

Use user scripts.

There are scripts to move and delete lines yet. You have to define key binds for those scripts (menu Scripts -> Edit User Scripts..., under xCode 3.2).

To duplicate line, you have to make your own script. But it's very simple ! Duplicate the "Move Line Down" script and remove the line which delete selected text :

delete (paragraphs startLine through endLine)
Saccular answered 22/8, 2010 at 7:3 Comment(0)
Y
3

Triple click to select the whole line, command-c to select and command-v twice to duplicate it. It's not an Xcode function, it's just part of the OS.

Yulma answered 15/2, 2009 at 18:46 Comment(1)
Mouse click and even worser, triple? That's surely not the solution people wanting to use keyboard shortcuts is looking for.Pirnot
O
3

There's a solution for XCode4 line duplication over here

I've also added line deletion to the plist:

<key>Remove Line</key> <string>selectLine:, deleteBackward:</string>

Overindulge answered 27/4, 2012 at 9:7 Comment(0)
T
3

No need to modify Xcode. You can just use the Xcode extension Linex

enter image description here

Tradein answered 20/10, 2017 at 15:5 Comment(1)
awesome ! greate solutionTerranceterrane
R
2

The solution by damien.flament works great and you may need set output to "Discard Output" see the pic below

Userscripts setting

P.S: I don't know how to comment his answer.

Refractometer answered 25/8, 2010 at 9:48 Comment(0)
O
2

As said above, close XCode and insert following to ~/Library/Application Support/Xcode/Key Bindings/ <user>.pbxkeys inside <dict> in <key>text</key> section:

    <key>^D</key>                                                                                                      
    <array>                                                                                                            
        <string>moveToLeftEndOfLine:</string>                                                                               
        <string>deleteToEndOfLine:</string>                                                                                      
    </array>                                                                                                           
    <key>^K</key>                                                                                                      
    <array>                                                                                                            
       <string>selectLine:</string>                                                                               
       <string>copy:</string>                                                                                     
       <string>moveToEndOfLine:</string>                                                                          
       <string>insertNewline:</string>                                                                            
       <string>paste:</string>                                                                                    
       <string>deleteBackward:</string>                                                                           
    </array>

Start XCode and enjoy CTRL-SHIFT-D and CTRL-SHIFT-K.
If you want CTRL-D and CTRL-K, use ^d and ^k in key definitions instead. Ensure there are no duplicate key bindings in the file.

Works fine for me with XCode 3.2

Ortensia answered 15/1, 2012 at 9:48 Comment(0)
V
2

This is possible using BetterTouchTool. CMD+D will duplicate a line. Create a new shortcut like this:

enter image description here

Use the Attach Additional Action Button to append the second and third shortcut

Violetteviolin answered 28/10, 2015 at 9:3 Comment(0)
D
1

If you already have customised your Xcode key bindings, you'll have to edit the file: ~/Library/Application Support/Xcode/Key Bindings/<user>.pbxkeys. Just add the two arrays (described above) to the Root/text dictionary.

Debbiedebbra answered 16/6, 2010 at 19:14 Comment(1)
Hiya. I don't quite follow this, the pbxkey document is XML whereas the ~/Library/KeyBindings/PBKeyBinding.dict file described above is a different format entirely (looks a bit like JSON). There isn't a Root/text entry in the pbxkeys document. Is it because I'm using a later version?Scaphoid
G
1

Three step to delete current line (see too long, but do very fast :D)

Cmd + : move to end of line
Cmd + Delete : delete to begin of line
Delete : delete empty line

Guarneri answered 22/9, 2015 at 10:5 Comment(0)
M
0

For Xcode 6.1 got to Xcode > Preferences > KeyBindings > Text And there is "Delete to End of Line" and assign a key you want.

Masqat answered 17/1, 2015 at 22:58 Comment(0)
D
0

XCodePlus delete line plugin, is a XCode that does this for you. It came pre installed with Alcatraz package manager...

https://github.com/payliu/XcodePlus

Dunkle answered 23/9, 2015 at 11:29 Comment(0)
H
0

Still there is no built-in way to duplicate lines, as of Xcode 9. And custom key bindings seem to have problems.

Update: Xcode 10.0 beta 6 (10L232m) is the same.

Henghold answered 17/10, 2017 at 12:37 Comment(0)
D
0

Go to this address :

/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet

and then copy IDETextKeyBindingSet.plist file in some where and then open copied file and insert

selectLine:, copy:, paste:, paste: like this picture enter image description here and save it and replace copied file in this address /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet

then restart xcode , open xcode prefences , go to keybinding tab , search for duplicate line(customized) and define short key for it like image below

[1]: https://i.stack.imgur.com/UTeZu.png

Diacritical answered 21/10, 2019 at 10:31 Comment(1)
From Review: Hi, this post does not seem to provide a quality answer to the question. Please either edit your answer and improve it, or just post it as a comment.Chutzpah

© 2022 - 2024 — McMap. All rights reserved.