如何进行击键以删除Xcode中的连续空格?

ipm*_*mcc 5 keyboard xcode editing

我想找出一种在Xcode(或者更一般地说,任何Cocoa文本编辑器)中具有键绑定的方法,它将删除(向左或向右,取决于键绑定)连续的空格而不删除任何非空白字符或换行符.

对于left-whitespace-delete,我认为逻辑是:

"如果克拉左边有一个非空格或换行符,则不做任何操作,否则删除克拉左边的所有连续空白字符,使克拉紧跟第一个非空格 - 或 - 左边的换行符."

显然,我也想要一致的正确操作版本.

在一个理想的世界里,我想要一个关于换行的更复杂/更聪明的行为,(可能删除只包含空格的连续行)但我会先解决这个简单的行.

我有QuicKeys,我并不害怕使用它.:)我也愿意自己写一些东西,如果有人对如何在运行时修补这样的行为有任何想法 - 这种行为在我的系统上的所有Cocoa文本编辑器中工作都是非常优秀的.

我对运行emacs,vi,vim,pico,nano,WordStar或任何其他文本编辑器感兴趣.如果解决方案无法在Xcode4中运行,那对我来说不是解决方案.

ipm*_*mcc 0

我想出了一些可行的办法。

\n

首先是错误的开始...

\n

我首先考虑制作一个 InputManager,但从 Snow Leopard 开始,InputManager 似乎已被弃用(我猜有充分的理由......它们是一个巨大的安全漏洞),所以它们不是一个选择。

\n

我还研究了使用输入法套件。使用输入法可能可以做我想做的事情,但后来我陷入了使用非标准输入法的困境,这有点不是我想要的。据我所知,输入法并不是真正适合这项工作的工具。

\n

...然后是(某种程度上)有效的事情。

\n

事实证明,Cocoa 文本编辑键绑定系统是非常可配置的。我偶然发现这个网页,它提供了很好的介绍。简而言之,我在 ~/Library/KeyBindings/ 中放置了一个名为 DefaultKeyBinding.dict 的 plist,它描述了几个快捷方式。这是文件:

\n
<?xml version="1.0" encoding="UTF-8"?>\n<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n<plist version="1.0">\n<dict>\n    <key>@~^\xef\x9c\xa8</key>\n    <array>\n        <string>setMark:</string>\n        <string>moveWordForward:</string>\n        <string>moveWordBackward:</string>\n        <string>deleteToMark:</string>\n    </array>\n    <key>@~^$\xef\x9c\xa8</key>\n    <array>\n        <string>setMark:</string>\n        <string>moveWordBackward:</string>\n        <string>moveWordForward:</string>\n        <string>deleteToMark:</string>\n    </array>\n</dict>\n</plist>\n
Run Code Online (Sandbox Code Playgroud)\n

组合键的确切语法/内容源自上述网页,但最终效果是按 Cmd-Opt-Ctrl-Delete 设置标记,向前移动一个单词(包括该单词之前的所有空格),然后向后移动一个单词(请注意,这与向前移动一个单词并不相反,因为它不会越过空格向后移动),然后删除到标记。这相当于 Shift-Opt-Right、Shift-Opt-Left、Delete。另一个组合键是相同的,只是它增加了 Shift 并反转了行为。

\n

这并不完美,因为它无法感知上下文。如果您在调用它时没有处于一系列空白中,那么您最终会删除您所在单词的一部分。也就是说,这是我在自从我发布这个问题以来一年(多)。

\n