代码之家  ›  专栏  ›  技术社区  ›  Martin Cote

emacs中的Objective-C压痕

  •  3
  • Martin Cote  · 技术社区  · 15 年前

        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 回复  |  直到 15 年前
        1
  •  6
  •   haxney    15 年前

    我已经在这个黑客有一点,并已接近,但它还没有完全发挥作用。我的解决办法是在 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 对齐规则列表 使用:

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

    现在,你必须执行 排列 两次;第一次只能按以下方式排列:

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

    请注意,冒号是离左边太远的两个字符。第二个 我会纠正的。别问我为什么。

    有很多事情要做 排列 所以很难搞清楚。希望有人能想出一个改进的方法。不管怎样,看看 relevant EmacsWiki 有关对齐的详细信息,请参见第页。

        2
  •  6
  •   Ivan Andrus    15 年前

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

        3
  •  0
  •   Brian Coleman    13 年前

    有一个客观的C模式可以做到这一点 here

    这是它的样子 like