There is a Duplicate
command in the Edit Menu (with a default shortcut of ⌘D), but it is (as Halley pointed out) meant for duplication in the Interface Builder part of Xcode.
So, how do you (easily) duplicate a line in Xcode 4?
Related question (with a working answer) for Xcode 3 ... and which does not work for Xcode 4.
Why not just copy & paste?
Because it is tedious and entails too much hand-acrobatics:
either (1): moving to line beginning and then pressing ⇧^E, then copying with ⌘C, moving to new line, alligning cursor, and finally pasting with ⌘V;
or (2): ^A (set cursor to line begining), ^SPACE (set mark), ^E (set cursor to line ending), ⇧^W (Select to Mark
; customized), copy, new line, etc.
As Frank Schröder (in the related question) put it:
The whole point is NOT to use the Cmd-C/Cmd-V shortcuts.
Why duplicate a single line? Duplicate whole paragraph is better. My sequence:
Duplicate Current Paragraph
Delete Current Paragraph
Works fine in Xcode 4.6
Go to this folder which contains dark side of the force:
/Developer/Library/PrivateFrameworks/IDEKit.framework/Resources
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources
.Open
IDETextKeyBindingSet.plist
.Add a new dictionary and a new command item as the screenshot below (name them what you want):
That's:
selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:
Restart Xcode and go to Preferences - Key Bindings, search for your command.
Set a key combination for the command:
Finally unleashed the power of key bindings on Xcode... Enjoy it!
@Hailei's answer was pretty good, but had the unfortunate side-effect of clobbering the clipboard contents (leaving it populated with the contents of the duplicated line), which is precisely the part of the manual copy/paste approach that I was trying to avoid.
So, I changed the command sequence to this:
The 2
yank:
s might not work as intended if you haveNSTextKillRingSize
set to something aside from1
, but I'm pretty sure1
is the default, and you have to do some non-trivial work to change it (it requires adding an entry to~/Library/Preferences/.GlobalPreferences.plist
).Just to complement Hailei's answer, the commands that worked the best for me were:
His suggested commands were copying the desired line two lines below, for me.