Xcode重复/删除行


Answers:


91

重点不是使用Cmd-C/ Cmd-V快捷方式。我遇到了来自IntelliJ的相同问题,并且能够使用来复制行Cmd-D并将其删除可以Cmd-Y节省大量时间。

从那以后一直困扰着我。但是,似乎其他人已经找到了可行的解决方案

简而言之,创建一个~/Library/KeyBindings/PBKeyBinding.dict具有以下内容的文件,然后重新启动Xcode。

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

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

这将创建两个快捷方式:Ctrl- Shift- K删除当前行Ctrl- Shift- D用于复制当前行。请注意,这使用Xcode中的自定义键绑定集的情况下才有效。切换到“ XCode Default”,一切正常。在Snow Leopard的XCode 3.2上进行了测试。

有关Mac OS X键绑定的更多信息:http : //funkworks.blogspot.it/2013/03/republishing-of-wwwerasetotheleftcompos.html


5
这应该是真正的答案。顺便说一句-如果要从Eclipse导入cmd-d(删除行)快捷方式,则必须首先在XCode
Chris R 2010年

@joshperry,什么与Xcode 4+兼容?该Duplicate(命令Edit -> Duplicate)似乎有“总是”变灰(不意味着复制线)。
Blaz

从第一天开始,我就一直使用OS X,但从未听说过按键绑定。多么酷的功能。看看我碰巧遇到的这个非常漂亮的GUI键绑定编辑器
亚历克斯·格雷

Apple的开发人员网站上找到了更多信息。
aleclarson 2014年

听起来不错,但似乎在Xcode 5.0.2中对我不起作用:(
voghDev 2014年

105

删除一行Ctrl-A转到该行的开头,然后Ctrl-K删除它,再一次Ctrl-K删除空行。(我不经常使用Xcode,但是我已经习惯了在Emacs和其他带有类似Emacs的绑定的文本输入中使用Xcode,并且它似乎也可以在Xcode中使用。)

并复制一行:我不知道有很多程序具有该命令,但是通常我只使用Copy + Paste-在Xcode中,它类似于CUA: Ctrl+A转到该行的开头,Shift+选择它,Command + C复制和Command + * V粘贴两次(覆盖该行并附加到该行之后)。

(经常在不同的程序中打字和编辑文本的人,有时因不得不在文本输入中进行一些更正而不得不用笨拙的小部件分散注意力,他只是无法避免记住这些序列,和习惯)


3
由于这是Cocoa文本系统的功能,因此在使用Cocoa进行文本输入的所有应用程序中都可以使用。还有更多这样的快捷方式,可以在这里找到它们的列表:hcs.harvard.edu/~jrus/Site/System%20Bindings.html :)
Ahti

2
在现代Mac上,“ yank”应为ctrl +Y。
CarmeloS 2013年

Command-V粘贴并重新缩进。控件 -Y还将粘贴但不会重新缩进粘贴的文本。
Scott Gardner 2015年

77

删除类似eclipse CTRL+ 的行D(在Xcode 4.5.1上测试):

首先,更改这些权利:

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/Resources/IDETextKeyBindingSet.plist用Xcode自己打开并添加以下新条目:

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

在此处输入图片说明

重新启动Xcode并打开Xcode> Preferences> KeyBindings。找到您的宏并定义一个快捷键:

在此处输入图片说明


5
如果要添加复制行的方法,请执行相同的操作,但是在将新值粘贴到IDETextKeyBindingSet.plist文件中时,请粘贴以下代码:“ selectLine:,copy:,moveToEndOfLine:,insertNewline:,paste:,deleteBackward: ”。
jollyr0ger 2013年

+1此解决方案有效,但在Xcode 4.6.1 ^ D中与其他现有键绑定冲突。
2013年

如何获得“复制当前行”呢?
Markus 2014年

这在xcode 6中不起作用。列表中仅调用了第一个函数
Mrug,

1
我喜欢它,在XCode 6.3.1下对我来说就像一种魅力。
fwielstra'5

9

我尝试了键绑定解决方案,但无法正常工作。但是,编辑我的XCode按键绑定就像是一种魅力。这是我的方法。

此解决方案不会更改剪贴板的内容!

打开XCode键绑定:

替代文字

在“编辑用户脚本”对话框中:

  1. 复制“下移行”脚本并将其重命名
  2. 复制“ Move Line Down.scpt”文件,重命名脚本,在脚本编辑器中通过双击选择文件
  3. 编辑脚本(打开“ AppleScript编辑器”),然后删除“删除(从startLine到endLine的段)”段落。
  4. 如果不想重新启动XCode,则似乎必须删除并重新添加脚本。确保将“输出”设置为“放弃输出”,否则源文件中将有“(null)”
  5. 我稍微修改了一下脚本,以选择正确的行:

重复排队:

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

线下重复:

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

替代文字


2
上面没有明确提到,存在用于删除行,上移行和下移行的现有脚本。可接受的答案有一个缺点,即只有将您的键绑定设置为XCode Default时,它才有效。使用脚本可以保留自定义的键绑定,因为脚本的键绑定与XCode其余部分的键绑定是分开处理的。
病原

7

好,所以我做了一段时间,然后突然坏了。现在,我从这里的不同文章中合并,找到了适用于XCode 6.3.1的解决方案。

  1. 转到/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Finder。

  2. 找到名为Resources的文件夹。右键单击它,按“获取信息”,解锁共享和权限设置(按锁定),然后将其设置为“全部读取和写入”。

  3. 进入文件夹并找到文件IDETextKeyBindingSet.plist。右键单击它,按“获取信息”,解锁共享和权限设置(按锁定),然后将其设置为“全部读取和写入”。

  4. 使用XCode打开文件(默认)

  5. 查找删除,右键单击并添加新行。将其命名为“删除行”。在值字段中,输入:selectLine:, deleteBackward:。(这也有重复的线路进行:selectLine:,copy:,moveToEndOfLine:,insertNewline:,paste:,deleteBackward:

  1. 启动XCode,转到首选项/键绑定并搜索Delete Line。设置快捷方式。请享用。



5

我知道这个线程已经很老了,但是我发现了使用BetterTouchTool的另一种解决方案,您可以通过在BTT中进行如下配置,在一个快捷方式中执行Ctrl+ ACtrl+ KCtrl+ K序列:

在此处输入图片说明

(使用附加附加操作按钮附加第二和第三快捷方式)

PS:来自Eclipse,其中Cmd+ D是删除行^^


4

三次单击以选择整行,按Command-c选择两次,并按Command-v两次以复制它。它不是Xcode函数,它只是操作系统的一部分。


2
鼠标单击,甚至更糟,三倍?那肯定不是人们想要使用键盘快捷键的解决方案。
Ixx 2012年

4

使用用户脚本。

目前尚有脚本来移动和删除行。您必须为这些脚本定义键绑定(xCode 3.2下的菜单脚本 -> 编辑用户脚本...)。

要复制行,您必须创建自己的脚本。但这很简单!复制“下移行”脚本,然后删除删除所选文本的行:

delete (paragraphs startLine through endLine)

3

有对XCode4线复制的解决方案在这里

我还将行删除添加到了plist中:

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


3

我们使用的是Xcode 9.0,并且键盘绑定仍然无法正常工作。叹。

我发现此要点非常有帮助,因此将其重新发布在此处以供将来参考:

  1. 打开 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
  2. 将以下XML代码段添加到该文件的底部上方 </dict>
  3. 转到Xcode首选项->键绑定->文本选项卡->滚动直到看到重复
  4. 单击复制当前行,为其添加快捷方式,例如。Cmnd + D(解决所有重复的绑定)
  5. 开启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>



2

damien.flament的解决方案效果很好,您可能需要将输出设置为“ Discard Output”,请参见下图

用户脚本设置

PS:我不知道如何评论他的答案。


2

正如上面所说的,密切的Xcode和插入以下,以 ~/Library/Application Support/Xcode/Key Bindings/ <user>.pbxkeys里面<dict><key>text</key>部分:

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

启动Xcode和享受CTRL- SHIFT- DCTRL- SHIFT- K
如果需要CTRL- DCTRL- K,请在键定义中使用^d^k。确保文件中没有重复的键绑定。

XCode 3.2对我来说很好用



1

如果您已经自定义了Xcode键绑定,则必须编辑文件:~/Library/Application Support/Xcode/Key Bindings/<user>.pbxkeys。只需将两个数组(如上所述)添加到Root/text字典中即可。


iya 我不太了解,pbxkey文档是XML,而上述〜/ Library / KeyBindings / PBKeyBinding.dict文件完全是另一种格式(看起来有点像JSON)。pbxkeys文档中没有根/文本条目。是因为我使用的是更高版本吗?
Ben Clayton

1

删除当前行的三步操作(看得太长了,但是做得很快:D)

Cmd+ :移至行尾
Cmd+ Delete:删除至行首
Delete:删除空行


0

对于Xcode 6.1,请转到Xcode>首选项>键绑定>文本,然后单击“删除到行尾”并分配所需的键。



0

从Xcode 9开始,仍然没有内置的方式来复制行。自定义键绑定似乎存在问题。

更新: Xcode 10.0 beta 6(10L232m)相同。


0

转到此地址:

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

然后在某些位置复制IDETextKeyBindingSet.plist文件,然后打开复制的文件并插入

selectLine:,copy:,paste:,paste:就像这张图片一样, 在此处输入图片说明 并保存并替换复制的文件到该地址/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet

然后重新启动xcode,打开xcode偏好设置,转到“ keybinding”选项卡,搜索重复的行(自定义)并为其定义短键,如下图所示

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


点评来源:您好,这篇文章似乎并没有为问题提供高质量的答案。请编辑您的答案并加以改进,或者仅将其发布为评论。
sɐunıɔןɐqɐp
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.