3

我正在使用 Emacs 来编辑我的 Objective-C 代码。默认缩进如下所示:

    NSTimer *timer =
        [NSTimer timerWithTimeInterval:1.0
                 target:self
                 selector:@selector(callback:)
                 userInfo:nil 
                 repeats:YES];

我希望 Emacs 像 XCode 一样缩进代码,即与冒号对齐:

    NSTimer *timer =
        [NSTimer timerWithTimeInterval:1.0
                                target:self
                              selector:@selector(callback:)
                              userInfo:nil 
                               repeats:YES];

有没有希望实现这一目标?

4

3 回答 3

6

我已经对此进行了一段时间的破解并且已经接近了,但它还没有完全发挥作用。我的解决方案是添加一个条目align-rules-list,这样一个简单的M-x align就可以了。问题是您必须运行align两次才能使其正常工作。

(obj-c-colons
 (regexp . "^\\(\\s-*[^:]+\\):")
 (justify . t)
 (repeat . t)
 (modes obj-c-mode)) ;; <= Replace with actual name of major mode

我实际上不知道objective-c 模式的名称是什么,所以你必须obj-c-mode用实际调用的模式替换。您可以将其添加到align-rules-list

(add-to-list 'align-rules-list
             '(obj-c-colons
               (regexp . "^\\(\\s-*[^:]+\\):")
               (justify . t)
               (repeat . t)
               (modes obj-c-mode)))

现在,您必须执行align两次;第一次只会按如下方式排列:

 NSTimer *timer =
        [NSTimer timerWithTimeInterval:1.0
                              target:self
                            selector:@selector(callback:)
                            userInfo:nil
                             repeats:YES];

请注意,冒号是离左边太远的两个字符。第二个align将纠正这一点。不要问我为什么。

该命令有很多内容align,因此很难弄清楚。希望有人想出一种方法来改进这一点。无论如何,请查看相关的 EmacsWiki页面以获取有关对齐的更多信息。

于 2009-08-06T20:28:21.650 回答
6

c-offsets-alist 中 objc-method-call-cont 的 c-lineup-ObjC-method-call-colons 有问题吗?

于 2009-08-08T05:32:32.103 回答
0

这里有一个 Objective C 模式可以做到这一点

这是它的样子

于 2011-12-23T17:01:39.480 回答