ChatGPT解决这个技术问题 Extra ChatGPT

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

在以前的 Xcode 版本中,可以创建一个键绑定来删除当前行。有不同的解决方案,例如在这里描述它们:

Xcode: Delete line hot-key

Xcode duplicate/delete line

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/

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

~/Library/Application Support/Xcode/Key Bindings/*.pbxkeys ~/Library/KeyBindings/DefaultKeyBinding.dict ~/Library/KeyBindings/PBKeyBinding.dict

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

但是,自 Xcode 4 以来,这些解决方案确实有效。

更新:问题仍与 Xcode 5.1.1 相同

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

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

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

与此同时,我决定用 keyboardmaestro.com 创建一个键盘宏。
我想下面列出了一些解决方案。我个人使用的是键盘大师宏。

V
Vasu

经过大量搜索,我得出了以下解决方案:

按住控制键,然后按 AKK。

(注意:第二个 K 删除空行)。

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

编辑:

要删除多个连续的行,首先按住控制键,然后按A(只是转到段落/行的开头),然后按住K直到所有行都被删除(这将作为光标保持在开头)。

只是为了简化任务(对我而言),我为 Delete to End of Paragraphhome/endcommandD > 转到段落的开头/结尾。


不错的解决方案,但我真的在寻找一条捷径。例如,如果我想删除 TextWrangler 中的 5 行,只需按 5 次 cmd-d。奇怪的是,Xcode 中没有使用 cmd-d ......
@Klaas,请查看我的更新答案。这可能不是您所期望的,但它仍然是一个很好的解决方案。
只要您的回答得到一些赞成,我就会接受它,因为 Xcode 4 不会很快包含这个。
xCode 太糟糕了! - 使用安卓工作室的安卓开发者。
最长的快捷键见过 CTRL+A+K+K 删除当前行
P
Paulo Mattos

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

默认情况下,没有为其分配键盘快捷键,因此您需要自己添加一个:

打开 Xcode > Preferences > Key Bindings Search for Delete Line 在 Key 列中添加键盘快捷键(例如 controloptionD)

https://i.stack.imgur.com/4gFYB.png


哇!不错的收获!从来没有想过这会发生!
有没有人想出其他可能发生的变化?
@Klaas 我也是,从没想过会看到这个!我在 Xcode 8.2.1 和 Xcode 8.3.2 IDETextKeyBindingSet.plist 文件之间运行了一个差异,检测到的唯一变化是上面的这个 Delete Line 命令:(
@FelixTurner 你试过新的 Xcode beta 2 了吗?
我在 Xocde 9 Beta 中找到了解决方法。请看下面我的回答。 stackoverflow.com/a/45868495/1287336
C
Community

知道了!这适用于 XCode 4.3 到 4.5,不需要额外的应用程序,并且是 XCode 特定的。

此解决方案与 here 中描述的 Duplicate Line 命令基本相同:

编辑 plist 文件

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

注意:

链接的答案建议为此使用 XCode,但我发现这会使 XCode 崩溃

此路径适用于 Lion - 它可能因其他操作系统版本而异

您可能需要 sudo 或更改权限才能编辑此文件

编辑前关闭 XCode

添加一个新的 元素

在此文件底部 <dict> 的结尾处添加此文本

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

注意:

这是在现有的 里面,所以在这之后有一个

这将命名操作“一键删除当前行”与字符串中的三个关键操作相关联。我在这里尝试了不同的选项以获得正确的组合。例如,如果您尝试 moveToBeginningOfLine、deleteToEndOfLine 而不是反之亦然,那么在空行上使用它会删除该行和整个下一行。这是不愉快的

保存并打开 XCode

在 XCode 中添加新的键绑定

请参阅 linked answer 中的屏幕截图或执行以下操作:

打开 XCode Preferences Select Key Bindings 单击 All 在搜索框中键入“Delete”并搜索“Delete Current Line in One Hit” 添加新的绑定。

这应该这样做,但有一个警告。我永远无法让 XCode 保存 新绑定。 here 中描述了相同的问题,但我的解决方法略有不同:

创建默认绑定的副本(点击绑定窗口左下角的 + 按钮并创建副本)在副本中设置新绑定关闭首选项对话框(这就是变体!)再次打开首选项并制作新的副本旧副本并删除旧副本。

多啰嗦,嗯?但它有效。现在我已映射 Ctrl+D 以删除 Lion 上 XCode 4.3 中的整个当前行。


更新:我发现这个解决方案令人恼火的一个限制是它一次只删除一行,即使你选择了很多。我的自然倾向是选择 3 行并按 ctrl+D 并将它们全部擦除 - 但事实并非如此。
请注意,如果您安装了新版本的 XCode,这将不会被保留,而您通常的键绑定自定义将会保留。 (我通过重命名旧的 XCode.app 并重新安装新的来“升级”)。实际的键绑定在 ~/Library... 所以它们被保留了,但是这个新条目不是
是的,它在 Xcode 5 中工作并保存了键绑定,这样可能会鼓励其他人认为它值得费心:)
@Rhubarb 要通过在这些行中选择文本并点击快捷方式来一次删除几行,只需在命令序列前面添加一个delete:delete:, moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:。如果您将其编辑到您的答案中,那就太好了。
这适用于 Xcode 6.2 (6C86e),而且我也不需要解决方法来使 Xcode“保存”键绑定。耶! :)
W
Wooseong Kim

我找到了 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 中看到自定义项,如下所示。

https://i.stack.imgur.com/Agjla.png

绑定使用!

编辑)我认为下面的一个比原来的更好。

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

Xcode 9 正确答案在这里。它适用于 Xcode 9 版本 9.0 (9A235)
为什么这会在 Xcode 9 中中断?这对我有点用。我必须替换现有删除行字符串值的值,而不是添加自定义键。
b
borisdiakur

我使用 BetterTouchTool,它很酷:

https://i.stack.imgur.com/1AoVZ.png


不错的选择,修改 plist 并不总是好的。并且容易丢失设置。帮助 Apple 使其适合。
解决问题的非常好的选择。不幸的是,这不是一个原子动作,所以如果你想撤销,你必须按 Cmd Z 两次(两次删除)。窗口管理器也很有用(我也推荐 Spectacle)。
BTT 是一个非常棒的工具。此外,只要 Apple 有您可以结合起来做您正在寻找的操作的操作,这种方法就可以很好地证明未来。
我没有考虑过使用 BTT(因为我已经在使用了!)比在应用程序中编辑内容要好得多。另外,您可以在机器之间同步配置,这是我需要的。
C
Community

Rhubarb 的答案是正确的并且有效,但有一件事,plist 文件中有更简单的命令。遵循 Rhubarb 的所有指示,但

代替

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

在下面使用

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

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

我想把它写成评论,但我的“声誉”不允许我这样做。


将您的解决方案与 this answer 混合可以解决问题。确实感谢
B
Bary Levy

尝试这个:

首先打开 Xcode->Preferences Select Key Bindigs search Delete Paragraph Change Delete Paragraph to your shortcut

https://i.stack.imgur.com/mJmSO.png


我不知道为什么其他人不使用这个简单的解决方案。请投票给它,因为其他的要复杂得多。这也是您应该这样做的方式:通过键绑定
在 Xcode 版本 9.0 (9A235) 中执行 Delete Paragraph 没有任何反应。你在 Xcode 9 中测试过吗?
a
apaderno

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

命令左箭头

向下移动箭头

删除

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


我正在使用 Better Touch Tool,您也应该能够在其中分配它。
o
onteria_

看起来 XCode 现在使用 plist 文件而不是 dict 文件,并且新格式不支持向键绑定添加多个命令。似乎也没有办法添加自定义命令以绑定到任何一个。我发现让某些东西正常工作的唯一方法是为单独的操作设置键绑定,例如 ^D 用于 deleteToEndOfLine:,然后 ^L 用于 moveToBeginningOfLine:,给你 ^L+^D 给你综合作用。


已经有一些默认值来处理这个问题。 ^k 表示“删除到行尾”,cmd-delete 表示“删除到行首”。
在常规(全局)keybindings.dict 文件中,我们将单独的命令放入一个数组中,这样就可以了。
L
LaC

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


我已经尝试过了,但是全局键绑定在 XCode 4 中不起作用。我在 TextMate 中测试了它们并且它们在那里工作。所以我做了正确的修改。
G
Grady Player

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

转到 xcode 首选项,然后是键绑定选项卡。复制默认设置,这样当我提出的建议破坏了你将使用的东西时,你就不会生我的气。

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

将第一个键设置为“移动到行首”,第二个键设置为“删除到行尾”

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

替代将设置一些东西来选择行,然后只需使用删除。


S
Simon Epskamp

XCode 5 和 6 的简单解决方案:

安装 alcatraz: http://alcatraz.io/ 然后用它来安装“XCodePlus delete line”插件:

Window > Package manager

还有lots of other awesome plugins


L
LoGoCSE

首先打开 Xcode->Preferences

选择键绑定

然后搜索删除

将删除行尾更改为您的快捷方式(我更喜欢 CMD + D)

https://i.stack.imgur.com/QAW82.png


嗯...这不会删除整行。
您应该将光标设置在行的开头
好的,这个和ctrl-k一样