2
;; C++ Mode
(c-set-offset 'access-label '-2)
(c-set-offset 'inclass '4)
(setq c-default-style "k&r"
      c-basic-offset 2)

これが私のC++構成です。Emacsに2つのスペースで構造体をインデントさせたいのですが、if / while / forブロックの場合、関数をインデントするのと同じですが、現在は次のようになっています。

struct plane {
    //4 spaces'?
};

ただし、これは次のようになります。

typedef car {
  //2 spaces!
}

とを使っc-modeてみc++-modeました。構造体の内部(現在4つのスペースでインデントされている)を実行すると、C ++モードでも(0のスペース)M-x c-set-offsetとして検出されます。topmost-intro

基本的に、現在のように内部構造体を4つのスペースではなく2つのスペースでインデントする必要があります。(GNU Emacs 24.2.1)

4

1 に答える 1

5

構成を削除してから開始する必要があります

(custom-set-variables
 '(c-basic-offset 2))

これにより、すべてのインデントが 2 つのスペースに設定されます。そうすれば、そこから改善できます。

c-offsets-alistたとえば、さまざまな要素のインデントをカスタマイズするように設定できます。またはc-hanging-braces-alist、同じ行または次の行で、ブレースを設定する必要がある場所を構成します。等々。

CC モード情報ファイルをインストールしている場合は、次のコマンドで参照できます。

Ctrl-h i mCC ModeRET

classCC モードはとを区別しません。structどちらも構文要素はinclassです。Custom Line-Up Functionのみを使用して、構造体に基づいて異なるインデントを持つことができます

(defun my/c-lineup-inclass (langelem)
  (let ((inclass (assoc 'inclass c-syntactic-context)))
    (if (not inclass)
        0
      (save-excursion
        (goto-char (c-langelem-pos inclass))
        (if (looking-at "struct") 0 '+)))))

classこの関数は、またはまたはの内側にある場合に検索し、それstructに応じてインデント レベルを返します。これをあなたのc-offsets-alist

(custom-set-variables
 '(c-offsets-alist (quote ((access-label . 0)
                           (topmost-intro . my/c-lineup-inclass)))))
于 2013-02-18T16:08:34.147 に答える