3

Objective-C コードの編集に Emacs を使用しています。デフォルトのインデントは次のようになります。

    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でうまくいくでしょう。問題は、それを機能させるために2回実行する必要があることです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今のところ、 2回実行する必要があります。初回は次のように並べるだけです。

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

コロンが左に2文字離れていることに注意してください。2番目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 に答える