emacs中的Objective-C缩进

时间:2009-08-06 16:58:56

标签: objective-c emacs indentation

我正在使用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];

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

3 个答案:

答案 0 :(得分: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命令有很多内容,所以搞清楚是很困难的。希望有人想出一个改进的方法。无论如何,请查看relevant EmacsWiki页面以获取有关对齐的更多信息。

答案 1 :(得分:6)

在c-offsets-alist中,ob -c-method-call-cont的c-lineup-ObjC-method-call-colons是否有问题?

答案 2 :(得分:0)

有一个Objective C模式执行此操作here

以下是like

的内容