objective-c - Xcode block (NSMallocBlock) 缩进(大括号自动从新行开始)

标签 objective-c xcode objective-c-blocks indentation

我想用大括号从新行开始打开 block 。

让我们远离关于这是否是一个好的决定的哲学讨论 -- 不管“哪里”和“何时”,“如何”仍然是绝对的。

所以,问题描述如下:

enter image description here

有什么办法可以实现吗?


找了半天,没找到解决办法。

我已经知道这样的事情:

  1. Snippet Edit -- 这个小程序将允许编辑默认 Xcode 的代码片段。因此,您将能够在 ifforwhile 等中从新行打开大括号。但是,这不允许更改 block 缩进。

  2. Uncrustify -- 这可能会解决我的问题,但看起来并不容易设置。而且它只会在代码编写完成后对其进行格式化,而不是在“进行中”进行格式化。此外,即使我正确设置了 uncrustify,它仍然会很慢——大约需要点击 4 次鼠标来格式化 block ,这很耗时。

有人知道任何其他解决方案吗?

编辑:

更具体地说,我希望在这一步按下 ENTER立即缩进该 block :

enter image description here

最佳答案

我找到的最简单的解决方案是:

下载Karabiner并更改您的 private.xml(您还可以查看文档 here)

您的 private.xml 可能如下所示:

<?xml version="1.0"?>
<root>
    <item>
        <name>Command+Enter to complete single block</name>
        <identifier>private.swap_cmnd+Enter_to_complete__single_block</identifier>
        <autogen>
            __KeyToKey__
            KeyCode::RETURN, ModifierFlag::COMMAND_L | ModifierFlag::NONE,
            KeyCode::RETURN,

            KeyCode::CURSOR_DOWN,
            KeyCode::CURSOR_RIGHT, ModifierFlag::COMMAND_L,
            KeyCode::DELETE, ModifierFlag::COMMAND_L,
            KeyCode::BRACKET_RIGHT, ModifierFlag::SHIFT_L,
            KeyCode::BRACKET_RIGHT,
            KeyCode::SEMICOLON,
            KeyCode::CURSOR_UP,
            KeyCode::CURSOR_UP,
            KeyCode::CURSOR_RIGHT, ModifierFlag::COMMAND_L,
            KeyCode::CURSOR_LEFT,
            KeyCode::RETURN,
            KeyCode::CURSOR_DOWN,
            KeyCode::CURSOR_DOWN,
            KeyCode::CURSOR_RIGHT, ModifierFlag::COMMAND_L,

            KeyCode::CURSOR_UP, ModifierFlag::SHIFT_L,
            KeyCode::CURSOR_UP, ModifierFlag::SHIFT_L,
            KeyCode::CURSOR_UP, ModifierFlag::SHIFT_L,

            KeyCode::I, ModifierFlag::CONTROL_L,
            KeyCode::CURSOR_RIGHT,
            KeyCode::CURSOR_UP,
            KeyCode::CURSOR_LEFT, ModifierFlag::SHIFT_L,
            KeyCode::TAB,
        </autogen>
    </item>

    <item>
        <name>Option+Enter to complete double block</name>
        <identifier>private.swap_Option+Enter_to_complete_double_block</identifier>
        <autogen>
            __KeyToKey__
            KeyCode::RETURN, ModifierFlag::OPTION_L | ModifierFlag::NONE,
            KeyCode::CURSOR_RIGHT,
            KeyCode::RETURN,
            KeyCode::CURSOR_UP,
            KeyCode::CURSOR_LEFT, ModifierFlag::COMMAND_L,
            KeyCode::TAB,

            KeyCode::RETURN,

            KeyCode::CURSOR_DOWN,
            KeyCode::CURSOR_DOWN,
            KeyCode::CURSOR_LEFT, ModifierFlag::COMMAND_L,
            KeyCode::TAB,
            KeyCode::RETURN,
            KeyCode::DELETE,
            KeyCode::CURSOR_DOWN,
            KeyCode::CURSOR_RIGHT, ModifierFlag::COMMAND_L,
            KeyCode::DELETE, ModifierFlag::COMMAND_L,
            KeyCode::BRACKET_RIGHT, ModifierFlag::SHIFT_L,
            KeyCode::BRACKET_RIGHT,
            KeyCode::SEMICOLON,
            KeyCode::CURSOR_UP,
            KeyCode::CURSOR_UP,
            KeyCode::CURSOR_RIGHT, ModifierFlag::COMMAND_L,
            KeyCode::CURSOR_LEFT,
            KeyCode::RETURN,
            KeyCode::CURSOR_UP,
            KeyCode::CURSOR_UP,
            KeyCode::CURSOR_UP,
            KeyCode::CURSOR_UP,
            KeyCode::CURSOR_RIGHT, ModifierFlag::COMMAND_L,
            KeyCode::CURSOR_LEFT,
            KeyCode::RETURN,
            KeyCode::CURSOR_DOWN,
            KeyCode::CURSOR_DOWN,
            KeyCode::CURSOR_DOWN,
            KeyCode::CURSOR_DOWN,
            KeyCode::CURSOR_DOWN,
            KeyCode::CURSOR_DOWN,
            KeyCode::CURSOR_RIGHT, ModifierFlag::COMMAND_L,

            KeyCode::CURSOR_UP, ModifierFlag::SHIFT_L,
            KeyCode::CURSOR_UP, ModifierFlag::SHIFT_L,
            KeyCode::CURSOR_UP, ModifierFlag::SHIFT_L,
            KeyCode::CURSOR_UP, ModifierFlag::SHIFT_L,
            KeyCode::CURSOR_UP, ModifierFlag::SHIFT_L,
            KeyCode::CURSOR_UP, ModifierFlag::SHIFT_L,
            KeyCode::CURSOR_UP, ModifierFlag::SHIFT_L,

            KeyCode::I, ModifierFlag::CONTROL_L,
            KeyCode::CURSOR_RIGHT,
            KeyCode::CURSOR_UP,
            KeyCode::CURSOR_UP,
            KeyCode::CURSOR_UP,
            KeyCode::CURSOR_UP,
            KeyCode::CURSOR_UP,
            KeyCode::CURSOR_LEFT, ModifierFlag::COMMAND_L,
            KeyCode::TAB,
        </autogen>
    </item>
</root>

完成此操作后,您现在可以通过按 +ENTER(而不是ENTER,打开区 block 时按+ENTER)。这是 preview (放慢速度,以便您看到详细信息)。

以上仅适用于单个 block 。如果你想一次打开两个 block ,你可以按ALT+ENTER。这是 preview (放慢速度,以便您看到详细信息)。

这是 preview与实际速度:

Demo CountPages alpha

关于objective-c - Xcode block (NSMallocBlock) 缩进(大括号自动从新行开始),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35120574/

相关文章:

ios - 我如何让 ARC 保留一个委托(delegate)足够长的时间以便在一个 block 中调用它?

objective-c - NSString sizeWithFont :constrainedToSize:lineBreakMode: differs from actual Label height

ios - 如何在不更改 iPhone 上的语言首选项的情况下使用 Xcode 以另一种语言测试我的 iOS 应用程序?

ios - 将 iOS 应用程序提交到应用程序商店应用程序标识符无效

ios - 我想在 UIView 类中按下按钮时触发导航 Controller

ios - 作为对象属性的 block 应该使用什么保留策略?

ios - NSlog 不打印新行\r\n

iphone - iOS - UUID 生成抛出一个奇怪的异常

ios - 如何根据键盘管理 ScrollView (向上和向下)在 Objective-C 中使用 NSNotificationCenter 在屏幕中显示和隐藏

objective-c - 是否可以将 block 定义为类的成员?