2017-03-15 10 views
20

私は私のプロジェクトのルートディレクトリに次の.clang形式のファイルを得た:clang形式を使用して4つのスペースでC++クラスを自動的にインデントする方法はありますか?

enter image description here

--- 
AlignTrailingComments: true 
AllowShortFunctionsOnASingleLine: false 
AllowShortIfStatementsOnASingleLine: true 
AllowShortLoopsOnASingleLine: true 
BreakBeforeBinaryOperators: false 
IndentWidth: 4 
SortIncludes: false 
NamespaceIndentation: All 
... 

問題は、私は私のC++ヘッダーに打ち鳴らすフォーマットを実行すると、なったクラスは次のようにautoindentedています

ご覧のとおり、&というラベルのプライベートラベルは、2つのスペースでインデントされています。しかし、私が達成しようとしていることは、以下の出力が(インデントを手動で微調整した)である。

enter image description here

そのようにコード-崩壊を行うのは本当に楽しい何かになります。

この効果を得るには、どうやって.clang形式を微調整できますか?

EDIT:あなたが見ることができるように

enter image description here

:私はunsuccesfully AccessModifierOffsetを使用してみました

、私は以下の値{-2,0,2,4} exampeを使用しましたパブリックブロック内のステートメントは正しくインデントされません。

EDIT2:私は@Henriqueユングソリューションを試したし、それは私がその組み合わせを使用した場合、結果はこのようなものになるだろう、のために求めているものを絶対にありません

enter image description here

ご覧のとおり、関数内のコンテンツは、4つではなく8つの空白で字下げされていますが、これはうまくありません。

EDIT3:

私はこの1つは間違いなく面白いですように私は再びつもりしようとしています数ヶ月前に恵みを与えてくれました。私がclang形式のソースコードについて十分な知識を持っていれば、残念なことに私はそれを撃つだろう...私はいくつかのclang devがこれを見て、いくつかの提案をすることを望む。

+0

"AccessModifierOffset"を試してください。これは、別のSOの質問の重複の可能性があります:http://stackoverflow.com/questions/29198963/how-can-i-tell-clang-format-to-indent-visibility-modifiers – caoanan

+0

@caoanan本当に、私はすでに数日前にAccessModifierOffsetを試しましたが、なんらかの理由でクラスを適切にインデントしていません。それは、それが下の文をインデントしていない公開/私/保護されたインデントされることは間違いないが。私の質問を見てください、私はあなたに例を入れました – BPL

+0

ええ、もし私がスクリーンショットを貼り付けることができれば(http://clang-format.me/)。あなたにはWebkitスタイルの設定が好きです。 –

答えて

0

アクセシビリティーオフセットIndentWidthに変更することで、目的の効果が得られました。基本的に、最初は、第二のオフセットとして使用されているので、あなたはこのようなあなたの.clang形式を作成する場合は、あなたが望む結果を得る:AccessModifierOffsetが0である

AccessModifierOffset: -4 
IndentWidth:  8 

場合は、publicキーワードでだろうメンバーと同じインデントレベル。ただし、IndentWidthを変更すると、すべてのコードがクラス宣言の外にあっても8つのスペースでインデントされます。

としての近くに私が言うことができるように
class Foo { 
    public: 
     Foo(); 
     virtual ~Foo(); }; 

int main(int argc, char *argv[]) { 
     std::cout << "Hello world" << std::endl; 
     return 0; 
} 
+0

答えがありがとうございますが、それは私が求めているものではありません。理由を説明するために私の答えを編集しました。std :: coutを見て0ステートメントを返します。 4を望んでいる。 – BPL

+0

ええ、私は副作用があることを知っていましたが、メンバーのために特定のインデント変数を見つけることができませんでした。 –

1

は、打ち鳴らす-フォーマットは非アクセス修飾子クラスの内容とは異なる機能の内容をインデントのためのオプションを提供しています:これは、サンプルコードです。つまり、以下のコードを検討されている:このコードで

class A { 
    public: 
    void foo() {} 
} 

void bar() { 
    int a; 
} 

、ライン「ボイドFOOを(){}」は常に同じ量インデントされる「INTを、」 clang形式で。

あなたはそれが利用可能であるしたいように見えるスタイルに最も近いものは、例えば、アクセス修飾子をインデントないから来る:

class A { 
public: 
    void foo() {} 
} 

void bar() { 
    int a; 
} 

これはWebKitの、Mozillaの、そしてLLVMにより、例えば、行われていますスタイル。

IndentWidth: 4 
AccessModifierOffset: -4 
関連する問題