在<编辑菜单中是 Duplicate
命令(默认快捷键为⌘ D ),但它是(正如Halley指出的那样)意味着在Xcode的Interface Builder部分重复。
那么,你如何(轻松)在Xcode 4中复制一行?
Related question(有一个有效的答案)......对Xcode 4不起作用。
因为它很乏味而且需要过多的手工杂技:
(1):移至行开头,然后按⇧^ E ,然后使用⌘C复制,移至新行,使用⌘V粘贴光标,最后粘贴;
或(2): ^ A (将光标设置为行开始), ^ SPACE (设置标记), ^ E (将光标设置为行尾),⇧^ W (Select to Mark
;自定义),复制,新行等
正如弗兰克施罗德(related question)所说:
重点不是使用Cmd-C / Cmd-V快捷方式。
答案 0 :(得分:162)
转到此文件夹,其中包含力量的暗侧:
/Developer/Library/PrivateFrameworks/IDEKit.framework/Resources
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources
。打开IDETextKeyBindingSet.plist
。
添加新词典和新命令项作为下面的屏幕截图(将它们命名为您想要的名称):
那是:selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:
重新启动Xcode并转到首选项 - 键绑定,搜索您的命令。
为命令设置组合键:
最后释放了Xcode上键绑定的强大功能......尽情享受吧!
答案 1 :(得分:59)
使用persiomission编辑以下文件,大多数时候OS不允许您编辑文件。
sudo chmod 666 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist
sudo chmod 777 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/
编辑以下文件
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
编写以下命令。
open /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
附加以下xml snipets。
<key>Customized</key>
<dict>
<key>Duplicate Lines</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string>
<key>Duplicate Current Line</key>
<string>moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, moveToBeginningOfLine:, yank:</string>
</dict>
已编辑文件的屏幕截图。
并重新启动Xcode并转到Preferences - Key Bindings
,搜索我们输入的命令(重复行和重复当前行)。
多数民众赞成。
答案 2 :(得分:17)
今天我为Xcode 5编写了一个非常小的插件,用于删除和复制行和选择。
您可以从我的GitHub回购下载: XcodeKit Plugin - https://github.com/ptfly/XcodeKit
答案 3 :(得分:13)
@ Hailei的答案相当不错,但是有一个令人遗憾的副作用,即破坏剪贴板内容(留下它填充了重复行的内容),这正是我手动复制/粘贴方法的一部分试图避免。
所以,我将命令序列更改为:
moveToBeginningOfLine:,
deleteToEndOfLine:,
yank:,
insertNewline:,
moveToBeginningOfLine:,
yank:
如果yank:
设置为除NSTextKillRingSize
之外的其他内容,则1
可能无法正常工作,但我非常确定1
是默认设置,并且你必须做一些非平凡的工作来改变它(它需要在~/Library/Preferences/.GlobalPreferences.plist
中添加一个条目。)
答案 4 :(得分:8)
为什么要复制一行?重复整段更好。我的序列:
重复当前段落
selectParagraph:,
delete:,
yank:,
moveToBeginningOfParagraph:,
yank:,
moveUp:,
moveToEndOfParagraph:
删除当前段落
selectParagraph:,
delete:,
moveUp:,
moveToEndOfParagraph:
在Xcode 4.6中正常工作
答案 5 :(得分:7)
编辑:2019年5月28日 在更新到Xcode 10.2后,我的快捷方式消失了。我不得不再次添加它们。
编辑:2018年12月23日 更新到Xcode 10.1后,我的所有快捷方式再次破裂。但不同的是,在更新plist文件以进行行复制后,我没有必要定义我的键绑定,它们已经存在。奇怪。
编辑:2018年10月14日 Xcode 10:苹果公司的高手真的喜欢复制/粘贴,并确保在每个版本的Xcode更新时,都会从每个人的安装中删除行复制。我们的开发人员对Xcode中的这种废话一直非常沮丧,因为永远是唯一没有行重复选项的IDE。我刚刚更新到Xcode 10,正如您猜测的那样 - 我的所有快捷键都与我的行重复功能一起被删除。但是,它像原始答案一样可以修复。这次略有不同,你需要以下几行:
<string>selectLine:, copy:, moveToBeginningOfLine:, paste:, moveToEndOfLine:</string>
编辑: Xcode 9:我不得不重做我的快捷方式和行复制 删除,但好的是现在你可以再次编辑IDETextKeyBindingSet.plist。这个高级苹果公司的家伙在发布这个版本时必须休假。
编辑: Xcode 8:Buggy,你根本无法修改IDETextKeyBindingSet.plist文件。 Xcode在启动时重置它。 Apple的这位高层人士真的决定让我们使用复制/粘贴而不是简单的行复制,就像所有其他IDE一样。
编辑: Xcode 7.1但仍然没有行重复和删除的快捷方式。这是我曾经使用过的唯一没有这种快捷方式的IDE。如果没有这两个关键捷径,我无法想象开发人员的生活。
根据我所阅读的内容,我为这些快捷方式设置了Xcode,并在http://jixte.com/2016/03/30/line-duplicate-and-deletion-in-xcode-7-x/
上发布了博客文章以下是如何做到的:
首先我们需要修改一个位于Xcode.app包内的plist文件(需要sudo编辑)
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist
然后查找<key>Insertions and Indentations</key>
并在<dict>
标记下添加以下内容:
<key>Insert New Line Below</key>
<string>moveToEndOfLine:, insertNewline:</string>
<key>Insert New Line Above</key>
<string>moveUp:, moveToEndOfLine:, insertNewline:</string>
<key>Duplicate Current Line</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string>
然后在<key>Deletions</key>
标记下的<dict>
部分内找到和这些内容:
<key>Delete Current Line</key>
<string>selectLine:, delete:</string>
<string>selectLine:, delete:</string>
现在打开/重新启动Xcode,转到“首选项”并转到“键绑定”选项卡。使用搜索栏过滤并查找新的快捷方式。然后在快捷方式说明前单击,为其指定您喜欢的快捷方式。确保您的快捷方式与现有快捷方式不冲突。
答案 6 :(得分:7)
我想知道为什么没有人提到使用⌘和箭头键(← ↑ → ↓)移动光标并选择整行(通过添加⇧)。
我通过使用⌘ + ←(而不是 ctrl 将光标移动到行的开头来定期复制整行(复制) + A )然后使用⌘ + ⇧ + →(而不是 ctrl + ⇧ + E )选择整行到最后然后复制/粘贴。
我遇到了其他似乎没有人使用这些键盘快捷键的线程。它们在OS X中是全球性的,我一直都在使用它们!更少的手工杂技;)
答案 7 :(得分:6)
好的,我已经想到了这个:
selectParagraph:, delete:, yank:, moveToBeginningOfLine:, setMark:, yank:, moveToBeginningOfLine:, moveLeft:, selectToMark:
由于我在每次更新XCode后应用此更改,因此我已为此制作了一个脚本。可能会造成一些损害,但我试图让它相对安全。它制作文件的副本,然后使用perl替换行的副本和附加命令。
cp /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist ~/Desktop/IDETextKeyBindingSet.plist; sudo perl -pi -e 's/\<string\>selectWord:\<\/string>/'$'\<string\>selectWord:\<\/string\>\n\t\t\<key\>Duplicate Selection\<\/key\>\n\t\t\<string\>selectParagraph:, delete:, yank:, moveToBeginningOfLine:, setMark:, yank:, moveToBeginningOfLine:, moveLeft:, selectToMark:\<\/string>/g' /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist
编辑:次要修复 edit2:更改为段落选择
答案 8 :(得分:3)
我会考虑将命令序列修改为:
selectLine:,
copy:,
moveToEndOfLine:,
insertNewline:,
deleteToBeginningOfLine:,
paste:,
moveToBeginningOfLine:,
deleteBackward:
添加的deleteToBeginningOfLine
会保留重复行的缩进。
答案 9 :(得分:2)
insertLineBreak至少需要我在新行上复制,没有它我在同一行上复制
答案 10 :(得分:2)
我在MacOS Sierra和Xcode 9上解锁.plist文件时遇到了很大的麻烦,甚至@Tim的决定也不适用于我。如果您遇到同样的问题,请转到终端并执行以下操作:
cd /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/
sudo chmod -R 777 *
nano IDETextKeyBindingSet.plist
还介绍了其他几种可能的方法here。
然后在纳米编辑器中点击^W
并输入'insertions'以跳转到'插入和缩进'部分。在<dict>
标记下粘贴此xml-snippet:
<key>Duplicate line</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewLine:, paste:, deleteBackward:</string>
按control + X
,然后按Y
,然后按Enter
将文件保存在nano编辑器中。
<key>Duplicate line</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertLineBreak:, moveUp:, paste:, moveToBeginningOfLine:</string>
答案 11 :(得分:1)
这是我的删除( CTRL + D )和重复( CMD + SHIFT + 来自我的IDETextKeyBindingSet.plist的D )条目。 (在/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources)
我只是在Xcode 4.6.1中设置它们(根据上面和其他地方的user570753的回答)
<key>Custimozed</key>
<dict>
<key>Delete Current Line</key>
<string>deleteToBeginningOfLine:, moveToEndOfLine:, deleteToBeginningOfLine:, deleteBackward:, moveDown:, moveToBeginningOfLine:</string>
<key>Duplicate Current Line</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, deleteToBeginningOfLine:, paste:, moveToBeginningOfLine:, deleteBackward:</string>
</dict>
答案 12 :(得分:0)
任何想要在XCode中匹配sublime的 duplicateLineUp 和 duplicateLineDown 的崇高文字用户,请将以下内容添加到 IDETextKeyBindingSet.plist 文件中
<key>Line Duplications</key>
<dict>
<key>Duplicate Current Line Above</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:, moveUp:</string>
<key>Duplicate Current Line Below</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string>
</dict>
答案 13 :(得分:0)
如果其他人被拒绝编辑IDETextKeyBindingSet.plist,您可以通过以下方式给自己读/写权限:
sudo chmod 777 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
答案 14 :(得分:0)
为了补充Hailei的答案,对我来说最有效的命令是:
selectLine:, copy:, moveRight:, moveLeft:, insertNewline:, paste:, deleteBackward:
他的建议命令是为我复制下面两行所需的行。
答案 15 :(得分:0)
<key>Duplicate Lines</key>
<string>selectLine:, copy:, moveToBeginningOfLine:, paste:</string>
支持重复的行。 (这适用于Xcode 9.2)
答案 16 :(得分:0)
至于Xcode 11,以上都不对我有用。第一个答案的行为很怪异,因为它是在下一行之后插入行。但是,以下答案对我有用。
<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>