【问题标题】:Xcode duplicate/delete lineXcode 重复/删除行
【发布时间】:2010-10-07 18:34:21
【问题描述】:

来自 Eclipse 并且一直习惯于重复行,很奇怪发现 Xcode 没有这样的功能。还是这样?

我知道可以更改系统范围的键绑定,但这不是我想要的。

【问题讨论】:

标签: xcode line duplicate-data


【解决方案1】:

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

【讨论】:

  • 鼠标点击甚至更糟,三倍?这肯定不是人们想要使用键盘快捷键的解决方案。
【解决方案2】:

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

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

(来自一个一直在输入和编辑文本的人,经常在不同的程序中,偶尔会因为在文本输入中进行一些修正时不得不用一个愚蠢的小部件分散自己的注意力而生气,这是他无法避免的记住这些顺序和习惯)

【讨论】:

  • 这将适用于所有使用 Cocoa 进行文本输入的应用程序,因为它是 Cocoa 文本系统的一个特性。还有更多这样的快捷方式,可以在此处找到它们的列表:hcs.harvard.edu/~jrus/Site/System%20Bindings.html :)
  • 'yank' 在现代 Mac 上应该是 ctrl + Y。
  • Command-V 粘贴并重新缩进。 Control-Y 也会粘贴但不会重新缩进粘贴的文本。
【解决方案3】:

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

从那以后它就一直困扰着我。但是,看起来其他人找到了一个有效的solution

简而言之,创建一个文件~/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

【讨论】:

  • 这应该是真正的答案。顺便说一句 - 如果你想从 Eclipse 中导入 cmd-d(删除行)快捷方式,你必须先在 XCode 的编辑菜单下更改添加书签快捷方式
  • @joshperry,有什么适用于 Xcode 4+ 的吗? Duplicate 命令(在 Edit -> Duplicate 中)似乎“总是”灰显(并不意味着复制行)。
  • 我从第一天开始就使用 OS X,从来不知道键绑定。多么酷的功能。看看this very nice GUI key bindings editor I happened upon
  • Apple's developer site上找到更多信息。
  • 听起来不错,但在 Xcode 5.0.2 中似乎对我不起作用:(
【解决方案4】:

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

【讨论】:

  • 嗨。我不太明白这一点,pbxkey 文档是 XML,而上述 ~/Library/KeyBindings/PBKeyBinding.dict 文件是完全不同的格式(看起来有点像 JSON)。 pbxkeys 文档中没有根/文本条目。是因为我使用的是更高版本吗?
【解决方案5】:

使用用户脚本。

目前有脚本可以移动和删除行。您必须为这些脚本定义键绑定(菜单 Scripts -> Edit User Scripts...,在 xCode 3.2 下)。

要复制行,您必须制作自己的脚本。但这很简单!复制“下移行”脚本并删除删除选定文本的行:

delete (paragraphs startLine through endLine)

【讨论】:

    【解决方案6】:

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

    P.S:我不知道如何评论他的回答。

    【讨论】:

      【解决方案7】:

      我尝试了键绑定解决方案,但我无法让它工作。然而,编辑我的 XCode 键绑定就像一个魅力。以下是我的制作方法。

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

      打开 XCode 键绑定:

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

      1. 复制“下移行”脚本并重命名
      2. 复制“Move Line Down.scpt”文件,重命名脚本,在脚本编辑器中(双击)选择文件
      3. 编辑脚本(打开“AppleScript 编辑器”)并删除“删除(段落 startLine 到 endLine)”段落。
      4. 如果您不想重新启动 XCode,您似乎必须删除并重新添加脚本。确保您将“输出”设置为“丢弃输出”,否则您的源文件中将有一个“(空)”
      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
      

      【讨论】:

      • 上面没说清楚,已经有Delete Line, Move Line Up, Move Line Down的脚本了。接受的答案有一个缺点,即它仅在您将键绑定设置为 XCode Default 时才有效。使用脚本可以让您保留自定义的键绑定,因为脚本的键绑定与 XCode 其余部分的键绑定是分开处理的。
      【解决方案8】:

      由于 Xcode 4 使使用键绑定难以实现这一点,我使用了Keyboard MaestroQuickeys 也应该可以很好地工作,但它不完全兼容 Lion)。例如,这是我的 Keyboard Maestro 快捷键(绑定到 ⌘-⇧-D):

      http://bit.ly/thC6yf

      【讨论】:

      • “现在以 36 美元的价格购买”......真是太便宜了)哈哈......直到我在 Maestro 网站上看到这个,我认为这可能是一个很好的解决方案
      • @ycomp,这是free solution
      【解决方案9】:

      如上所述,关闭 XCode 并在 &lt;dict&gt; 内的 &lt;key&gt;text&lt;/key&gt; 部分中插入以下内容:

          <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 适合我

      【讨论】:

        【解决方案10】:

        here 上存在 XCode4 行重复的解决方案

        我还在 plist 中添加了行删除:

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

        【讨论】:

          【解决方案11】:

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

          用 Xcode 自己打开 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist 并添加这个新条目:

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

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

          【讨论】:

          • 如果你想添加一种方法来复制一行,做同样的事情,但是在 IDETextKeyBindingSet.plist 文件中粘贴新值时,粘贴此代码“selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:".
          • +1 此解决方案有效,但在 Xcode 4.6.1 中 ^D 与其他现有键绑定冲突。
          • 你怎么能得到'重复当前行'?
          • 这在 xcode 6 中不起作用。仅从列表中调用第一个函数
          • 我喜欢它,在 XCode 6.3.1 下对我来说就像一个魅力。
          【解决方案12】:

          对于 Xcode 6.1 进入 Xcode > Preferences > KeyBindings > Text 并且有“删除到行尾”并分配一个你想要的键。

          【讨论】:

            【解决方案13】:

            我知道这个线程已经很老了,但是我找到了另一个使用BetterTouchTool的解决方案,你可以执行 Ctrl+A, Ctrl+K, Ctrl+K 序列在一个快捷方式中,通过在 BTT 中这样配置:

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

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

            【讨论】:

              【解决方案14】:

              好的,所以我让这个工作了一段时间,然后突然坏了。现在我结合了这里的不同帖子,找到了适用于 XCode 6.3.1 的解决方案。

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

              2. 找到名为 Resources 的文件夹。右键单击它,按获取信息,解锁共享和权限设置(通过按锁)并将其设置为所有人的读写。

              3. 进入文件夹,找到文件IDETextKeyBindingSet.plist。右键单击它,按获取信息,解锁共享和权限设置(通过按锁)并将其设置为所有人的读写。

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

              5. 查找删除,右键单击并添加新行。例如,将其命名为 Delete Line。在值字段中,输入:selectLine:, deleteBackward:。 (对于重复行也可以这样做:selectLine:,copy:,moveToEndOfLine:,insertNewline:,paste:,deleteBackward:

              1. 启动 XCode,转到首选项/键绑定并搜索删除行。设置快捷方式。尽情享受吧。

              【讨论】:

                【解决方案15】:

                删除当前行的三个步骤(看太长,但做得很快:D)

                Cmd + : 移动到行尾
                Cmd + Delete : 删除开始of line
                Delete : 删除空行

                【讨论】:

                  【解决方案16】:

                  XCodePlus 删除线插件,是一个为您执行此操作的 XCode。它预装了 Alcatraz 包管理器...

                  https://github.com/payliu/XcodePlus

                  【讨论】:

                    【解决方案17】:

                    这可以使用BetterTouchTool。 CMD+D 将复制一行。 像这样创建一个新的快捷方式:

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

                    【讨论】:

                      【解决方案18】:

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

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

                      1. 打开/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
                      2. 将以下 XML sn-p 添加到该文件的底部上方&lt;/dict&gt;
                      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>

                      【讨论】:

                      • 它说:这个文件被文件锁定
                      【解决方案19】:

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

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

                      【讨论】:

                        【解决方案20】:

                        无需修改 Xcode。你可以只使用 Xcode 扩展 Linex

                        【讨论】:

                        • 太棒了!很好的解决方案
                        【解决方案21】:

                        要在Xcode 10.1中删除行,请按照以下截图的步骤添加一个快捷键。

                        【讨论】:

                          【解决方案22】:

                          去这个地址:

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

                          然后将IDETextKeyBindingSet.plist文件复制到某个地方然后打开复制的文件并插入

                          selectLine:, 复制:, 粘贴:, 粘贴: 喜欢这张照片 enter image description here 并保存并替换此地址/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet 中的复制文件

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

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

                          【讨论】:

                          • 点评来源: 嗨,这篇文章似乎没有为问题提供quality answer。请编辑您的答案并改进它,或者将其作为评论发布。
                          猜你喜欢
                          • 2017-02-10
                          • 1970-01-01
                          • 2018-04-07
                          • 2012-05-31
                          • 1970-01-01
                          • 1970-01-01
                          • 2012-03-27
                          相关资源
                          最近更新 更多