4

我正在使用 Emacs 进行一些 obj-c 编程,而且我很难使用默认的缩进方案。我不知道足够的列表或 emacs lisp 来自己解决这个问题,但希望这里有人可以伸出援助之手。

这是我希望如何缩进代码的示例:

void someFunc() {
    NSBitmapImageRep* repout = [
        [NSBitmapImageRep alloc]
        initWithBitmapDataPlanes: NULL
        pixelsWide: width
        pixelsHigh: height
        bitsPerSample: 8
        samplesPerPixel: 4
        hasAlpha: YES
        isPlanar: NO
        colorSpaceName: NSDeviceRGBColorSpace
        bytesPerRow: width*4
        bitsPerPixel: 32
    ];
}

然而,这就是 Mx indent-region 当前所做的,这非常可怕:

void someFunc() {
    NSBitmapImageRep* repout = [
        [NSBitmapImageRep alloc]
                                   initWithBitmapDataPlanes: NULL
                                                 pixelsWide: width
                                                 pixelsHigh: height
                                              bitsPerSample: 8
                                            samplesPerPixel: 4
                                                   hasAlpha: YES
                                                   isPlanar: NO
                                             colorSpaceName: NSDeviceRGBColorSpace
                                                bytesPerRow: width*4
                                               bitsPerPixel: 32
        ];
}

我不太在乎让冒号上的东西排成一行,而是让它们在第一个字母上排成一行。此外,它显然将参数列表缩进得太远了。最后,它放置了结束“];” 一个缩进级别太深。

非常感谢任何可能发布回复的 emacs 配置黑客。

-帕特里克

4

1 回答 1

0

你可以通过调用来改变不同句法元素的缩进c-set-offset。如果您以交互方式调用它,emacs 会告诉您要更改的“缩进变量”的值,并会询问您的值。

以编程方式,这会做一些接近你提到的例子中想要的事情,但你可能有许多其他用例需要另一种行为:

(c-set-offset 'arglist-intro '+)
(c-set-offset 'arglist-close 0)
(c-set-offset 'objc-method-call-cont 'c-lineup-argcont)
于 2013-07-29T08:52:30.240 回答