如何在Xcode 8中创建删除行键盘快捷键?Xcode 3解决方案不再起作用


80

在以前的版本中Xcode,可以创建键绑定以删除当前行。存在不同的解决方案,例如,在此处进行描述:

Xcode:删除行热键

Xcode重复/删除行

http://bigdiver.wordpress.com/2009/09/11/configure-homeend-key-bidings-on-mac-os-x/

http://www.betadesigns.co.uk/Blog/2010/02/03/custom-xcode-shortcuts/

所有解决方案都包括修改以下文件之一:

〜/库/应用程序支持/ Xcode /键绑定/*.pbxkeys〜/
库/键绑定/DefaultKeyBinding.dict〜/库/键绑定
/PBKeyBinding.dict

http://cocoasamurai.blogspot.com/2011/03/xcode-4-keyboard-shortcuts-now.htmlXcode 4是现有快捷方式的一个很好的资源。列出了许多有关删除的内容,但没有列出“删除行”。

但是这些解决方案不是因为工作Xcode 4

更新:问题仍然与Xcode 5.1.1

更新:问题仍然与Xcode 6.1 GM Seed 2

更新:截至2016年4月26日仍适用于Xcode 7.3(7D175)

更新:六年后,Xcode 8.3具有内置解决方案。请参阅下面的答案。


同时,我决定使用keyboardmaestro.com创建一个键盘宏。
克拉斯2012年

我想下面列出了一些解决方案。我个人使用的是Keyboard Maestro宏。
克拉斯

Answers:


71

看起来Xcode 8.3终于添加了Delete Line命令:)

默认情况下,没有键盘快捷方式分配给您,因此您需要在以下位置添加自己的键盘快捷方式:

  1. 打开Xcode >首选项>按键绑定
  2. 搜索 Delete Line
  3. 在“键”列中添加键盘快捷

Xcode按键绑定


1
哇!好赶上!从来没有想过这会发生!
克拉斯

有没有人发现其他可能会改变的东西?
克拉斯

1
@Klaas我也是男人,没想到会看到这个!我在Xcode 8.2.1和Xcode 8.3.2IDETextKeyBindingSet.plist文件之间进行了比较,检测到的唯一变化是此Delete Line命令上方:(
Paulo Mattos

@FelixTurner您是否尝试过新的Xcode beta 2
Paulo Mattos

3
我在Xocde 9 Beta中找到了解决方法。请在下面查看我的答案。stackoverflow.com/a/45868495/1287336
Wooseong Kim,

95

经过四处搜寻,我得出以下解决方案:

按住control键,然后按AKK

(注意:秒K删除空行)。

实际上,它是两个命令的组合:Move to Beginning of ParagraphDelete to End of Paragraph。您也可以使用/设置其他键,也可以对其他命令使用/设置/更改键绑定,例如Move to Beginning of LineDelete to End of Line。我使用了上面的(默认)键绑定,因为它们很适合我。

编辑:

要删除多个连续的行,请先按住control键,然后按A(只是转到段落/行的开头),然后按住K直到删除所有行(这将起作用,因为光标停留在开始)。

只是为了让任务容易(对我来说),我已经设置commandDDelete to End of Paragraphhome/end去开始一段/结束。


2
不错的解决方案,但我确实在寻找一个快捷方式。例如,如果要删除TextWrangler中的5行,则只需按5次cmd-d。奇怪的是,Xcode中没有使用足够的cmd-d ...
Klaas

@Klaas,请参阅我的最新答案。它可能不是您所期望的,仍然是一个很好的解决方案。
Vasu 2012年

一旦您的答案得到了好评,我会接受的,因为Xcode 4不会在任何时候将其包含在内。
克拉斯2012年

xCode太糟糕了!-使用android studio的Android开发人员。
M'hamed

最长的快捷方式可以看到CTRL + A + K + K删除当前行
canbax

59

得到它了!这可以在XCode 4.3到4.5中使用,并且不需要额外的应用程序,并且是XCode特定的。

此解决方案基本上与此处描述的“重复行”命令相同:

编辑plist文件

它位于/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist

注意:

  • 链接的答案建议为此使用XCode,但是我发现这会使XCode崩溃
  • 该路径适用于Lion-对于其他操作系统版本,可能有所不同
  • 您可能需要sudo或更改权限才能编辑此文件
  • 在编辑之前关闭XCode

添加一个新<dict>元素

<dict>在此文件底部的关闭位置上方添加此文本

    <key>Custom</key>
    <dict>
      <key>Delete Current Line In One Hit</key>
      <string>moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:</string> 
    </dict>

注意:

  • 这是内部的现有<dict>于是就有了</dict></plist>后面这个
  • 这会将命名的动作“一击中删除当前行”与字符串中的三个关键动作相关联。我在这里尝试了不同的选择,以获得正确的组合。例如,如果尝试moveToBeginningOfLine,deleteToEndOfLine(而不是相反),则在空行上使用它会删除该行以及整个下一行。哪个不愉快

保存并打开XCode

在XCode中添加新的键绑定

请在链接的答案中查看此屏幕截图或执行以下操作:

  1. 打开XCode首选项
  2. 选择键绑定
  3. 点击全部
  4. 在“搜索”框中,键入“删除”,然后搜索“一键删除当前行”
  5. 添加新的绑定。

这应该这样做,但有一个警告。我永远无法获得XCode来保存新的绑定。尽管我的解决方法略有不同,但此处描述的是相同的问题:

  1. 创建默认绑定的副本(单击“绑定”窗口左下方的+按钮并创建副本)
  2. 在重复项中设置新的绑定
  3. 关闭偏好设置对话框(就是这种情况!)
  4. 再次打开首选项,对旧副本进行新的副本,然后删除旧副本。

多么mar琐,是吗?但这有效。现在,我已将Ctrl + D映射为删除Lion上XCode 4.3中的整个当前行。


更新:我发现惹恼该解决方案的一个限制是,即使您选择了很多选项,它一次也只能删除一行。我的自然倾向是选择3行,然后按ctrl + D并将其全部擦除-但事实并非如此。
大黄2012年

请注意,如果您安装新版本的XCode,则不会保留该版本,而通常的键绑定自定义项将保留。(我通过重命名旧的XCode.app并重新安装新的XCode.app来“升级”)。实际的键绑定在〜/ Library中...因此保留了它们,但此新条目不存在
Rhubarb 2012年

是的,它可以在Xcode 5中工作并保存键绑定,这样可能会鼓励其他人认为这值得打扰:)
RedYeti 2013年

@Rhubarb要通过在这些行中选择文本并单击快捷键来一次删除多行,只需delete:在命令序列前面添加一个:delete:, moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:。如果将其编辑为答案,那就太好了。
LopSae 2014年

2
这在Xcode 6.2(6C86e)中有效,并且我也不需要变通方法来使Xcode“保存”键绑定。好极了!:)
Will Hains 2014年

16

我找到了Xcode 9的临时解决方法。

打开Xcode / Content / Frameworks / IDEKit.framework / Resources / IDETextK‌eyBindingSet.plist并添加以下行。

它模仿了在有限支持下Xcode 8中发生的动作。它只能删除一行,但我对某种方式感到满意。我希望这会尽快解决。

<key>Customized</key>
<dict>
    <key>Delete Line</key>
    <string>moveToBeginningOfLine:, deleteToEndOfLine:, moveDown:, deleteBackward:</string>
</dict>

重新启动Xcode后,您可以在Key Bindings下面看到定制项。

在此处输入图片说明

绑定并使用它!

编辑)我认为以下一项优于原始一项。

<string>moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:</string>

2
Xcode 9在这里正确答案。它适用于Xcode 9版本9.0(9A235)
uspython

为什么在Xcode 9中中断了?这有点适合我。我必须替换现有“删除行”字符串值的值,而不是添加自定义键。
亚历山大·史密斯

13

我使用BetterTouchTool,这很酷:

在此处输入图片说明


一个很好的选择,修改plist并不总是很好。而且容易丢失设置。帮助Apple使其变得合适。
Albert.Q14 2014年

解决问题的很好的选择。不幸的是,这不是原子操作,因此,如果要撤消操作,则必须按两次Cmd Z(两次删除)。另外,窗口管理器还很有用(我也建议使用Spectacle)。
Rudolf Real

1
BTT是一个很棒的工具。而且,只要Apple有您可以组合以执行所需功能的动作,该方法就可以证明是未来的证明。
SuperDuperTango 2015年

1
我没有考虑过使用BTT(因为我已经使用过!)比在应用程序内进行编辑要好得多。另外,您可以在计算机之间同步配置,这是我需要的。
2015年

9

大黄的答案是正确的,并且有效,但有一件事,plist文件中有更简单的命令。遵循大黄的所有说明,但是

代替

<string>moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:</string>

在下面使用

<string>selectLine:, delete:</string>

这更加清楚,并排除了任何故障的可能性。

我想以此作为评论,但是我的“声誉”不允许我这样做。


将您的解决方案与此答案混合在一起即可解决问题。的确的感谢
marcelosalloum 2015年

8

尝试这个:

  1. 首先打开Xcode-> Preferences

  2. 选择关键Bindigs

  3. 搜索删除段落

  4. 删除段落更改为快捷方式

在此处输入图片说明


我不知道为什么其他人没有使用这个SIMPLE解决方案。请投票给它,因为其他人要复杂得多。这也是您应该如何执行的操作:通过密钥绑定
清单

Delete Paragraph在Xcode 9.0版(9A235)中什么也不会执行。您是否在Xcode 9中对其进行了测试?
Wooseong Kim

2

如果您是Keyboard Maestro用户,只需创建一个执行以下操作的宏:

  • 命令左箭头
  • 向下移动箭头
  • 删除

我将其分配给Command-D,并使其仅在Xcode中可用。


我正在使用Better Touch Tool,您也应该可以在其中进行分配。
abc123 2013年

1

看起来XCode现在使用的是plist文件而不是dict文件,并且新格式不支持在键绑定中添加多个命令。似乎也没有添加自定义命令绑定到两者的方法。我发现使某件事起作用的唯一方法是为单独的动作设置按键绑定,例如^Dfor deleteToEndOfLine:,then ^Lfor moveToBeginningOfLine:,让^L+^D您获得组合的效果。


已经有一些默认值可以处理此问题。^ k表示“删除到行尾”,cmd-删除表示“删除到行尾”。
克拉斯

在常规(全局)keybindings.dict文件中,我们将单独的命令放入数组中,并且可以正常工作。
McUsr 2014年

1

如果您不介意在其他应用程序中使用该键绑定,则可以尝试在常规可可键绑定中进行设置。有一个解释。


2
我已经尝试过了,但是全局键绑定在XCode 4中不起作用。我在TextMate中对其进行了测试,并且它们在那里可以正常工作。所以我做了正确的修改。
克拉斯

1

似乎现在无法完成...如果我错了,请随时纠正我...但这是我的新解决方案...

转到xcode偏好设置,然后转到键绑定选项卡。复制默认设置,这样当我提出的建议破坏了您将要使用的功能时,您就不会生气。

找到两个相邻的键,这些键不用于您使用的任何命令...“;”,“'”,也许。(我不对新文件使用命令n,所以我选择了n,m)

将第一个键设置为“移至行乞”,第二个键设置为“删除至行尾”

然后使用该顺序删除一行...

另外,将设置一些内容来选择行,然后使用delete即可。



-1

首先打开Xcode-> Preferences

选择关键Bindigs

然后搜索删除

Delete The Line Of Line更改为快捷方式(我更喜欢CMD + D

就这样这是屏幕截图


嗯...这不会删除整行。
克拉斯

您应将光标设置在该行的开头
LoGoCSE

好的,这与ctrl-k相同
Klaas
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.