本軟體适用于C, C++, C++/CLI, Objective‑C, C#, and Java
一、使用流程
1.安裝軟體
linux:apt install astyle,重新開機vscode
windows:下載下傳最新版本,并将exe路徑添加至PATH,重新開機vscode
2.安裝vscode插件Astyle
3.配置
使用:設定->拓展->Astyle->在settings.json中編輯(後附具體配置)
配置示意圖
"astyle.additional_languages": [
"c",
"cpp",
],
"astyle.cmd_options": [
"--style=allman",
"--indent=spaces=4",
"--indent-modifiers",
"--indent-switches",
"--indent-cases",
"--indent-namespaces",
"--indent-preproc-block",
"--min-conditional-indent=2",
"--pad-oper",
"--pad-header",
"--unpad-paren",
"--delete-empty-lines",
"--align-pointer=name",
"--align-reference=name",
"--keep-one-line-statements",
"--convert-tabs",
"--close-templates",
/*"--max-code-length=#", 單行code最大長度
"--break-after-logical",*/
"--suffix=none",
"--lineend=linux",
"--verbose",
],
"[c]": {
"editor.defaultFormatter": "chiehyu.vscode-astyle"
},
"[cpp]": {
"editor.defaultFormatter": "chiehyu.vscode-astyle"
},
(配置參考:RT-thread)
具體配置:
1.大括号選項
--style=allman / --style=bsd / --style=break / -A1 :分離大括号風格
int Foo(bool isBar)
{
if (isBar)
{
bar();
return 1;
}
else
return 0;
}
--style=java / --style=attach / -A2 :JAVA風格 ——附加大括号
int Foo(bool isBar) {
if (isBar) {
bar();
return 1;
} else
return 0;
}
--style=kr / --style=k/r / -A3:Linux風格 —— 開始的大括号與名稱空間、類和函數定義分開。其餘大括号附加到函數内的所有其他内容,包括數組、結構體、枚舉和語句。
int Foo(bool isBar)
{
if (isBar) {
bar();
return 1;
} else
return 0;
}
--style=stroustrup / -A4:Stroustrup風格 —— 使用了linux大括号,并将大括号的結束頭與結束頭分開(例如:break - closing - headers)。開始的大括号隻從函數定義中斷開。開始的大括号附加到函數中的所有其他内容,包括名稱空間、類、數組、結構、枚舉和語句。這種樣式經常與“attach - closing - while”、tab縮進和5個空格縮進一起使用。
int Foo(bool isBar)
{
if (isBar) {
bar();
return 1;
}
else
return 0;
}
--style=whitesmith / -A5:白鐵匠風格 —— 使用破碎的,縮進的括号。Switch塊和類塊縮進以防止以下case語句和c++類修飾符(public, private, protected)的“挂縮進”。
int Foo(bool isBar)
{
if (isBar)
{
bar();
return 1;
}
else
return 0;
}
--style=ratliff / --style=banner / -A6:Ratliff風格 —— 使用附加的,縮進的括号。Switch塊和類塊縮進是為了防止下面的case語句和c++類修飾符(public, private, protected)出現“挂縮進”。
int Foo(bool isBar) {
if (isBar) {
bar();
return 1;
}
else
return 0;
}
--style=gnu / -A7:GNU風格 —— 使用斷括号。額外的縮進隻被添加到函數内的塊中。整個塊都是縮進的,而不僅僅是大括号。這種樣式經常用于縮進2個空格。
int Foo(bool isBar)
{
if (isBar)
{
bar();
return 1;
}
else
return 0;
}
--style=linux / --style=knf / -A8:Linux風格 —— 使用Linux大括号。開始的大括号與名稱空間、類和函數定義分開。大括号附加到函數内的所有其他内容,包括數組、結構體、枚舉和語句。最小的條件縮進是一半縮進。如果您想要不同的最小條件縮進,請使用K&R樣式。這種風格最适合大縮進。它經常與縮進8個空格一起使用。也稱為核心範式(KNF)風格,這是在Linux BSD核心中使用的風格。
int Foo(bool isBar)
{
if (isFoo) {
bar();
return 1;
} else
return 0;
}
--style=horstmann / --style=run-in / -A9:Horstmann風格 —— 使用破括号和插入語句。switch是縮進的,以允許在打開開關塊上磨合。這種樣式經常使用縮進3個空格。
int Foo(bool isBar)
{ if (isBar)
{ bar();
return 1;
}
else
return 0;
}
--style=1tbs / --style=otbs / -A10:One True Brace 風格 —— 使用linux大括号,并将大括号添加到未加大括号的條件語句中。開始的大括号與名稱空間、類和函數定義分開。大括号附加到函數内的所有其他内容,包括數組、結構體、枚舉和語句。
int Foo(bool isBar)
{
if (isFoo) {
bar();
return 1;
} else {
return 0;
}
}
--style=pico / -A11:Pico風格 —— 使用斷開的大括号和帶有附加的閉大括号的run-in語句。右大括号附加到代碼塊的最後一行。開關是縮進的,以允許在打開開關塊上磨合。這種風格意味着保持一行塊和保持一行語句。如果使用了add-大括号,它們将被添加為一行大括号。這種樣式經常用于縮進2個空格。
int Foo(bool isBar)
{ if (isBar)
{ bar();
return 1; }
else
return 0; }
--style=lisp / --style=python / -A12:Lisp風格 —— 使用附加的開括号和閉括号。右大括号附加到代碼塊的最後一行。這種風格意味着保持一行語句,而不是保持一行塊。此樣式不支援單行大括号。如果使用了add-one-line-大括号,它們将被添加為多行大括号。
int Foo(bool isBar) {
if (isBar) {
bar()
return 1; }
else
return 0; }
--style=google / -A14: 谷歌風格 —— 使用附加的花括号和縮進的類通路修飾符。有關縮進修飾符格式的示例,請參閱縮進修飾符選項。這實際上不是唯一的大括号風格,而是帶有非大括号變體的Java風格。這種樣式經常用于縮進2個空格。
int Foo(bool isBar) {
if (isBar) {
bar();
return 1;
} else
return 0;
}
--style=vtk / -A15:VTK(可視化工具包)風格 —— 使用破碎、縮進的大括号,除了類、數組、結構、枚舉和函數定義的左大括号。Switch塊縮進是為了防止下面的case語句出現“挂縮進”。
int Foo(bool isBar)
{
if (isBar)
{
bar();
return 1;
}
else
return 0;
}
--style=mozilla / -A16:Mozilla風格 —— 使用linux大括号。開始的大括号與類、結構體、枚舉和函數定義分開。大括号附加到函數中的所有其他内容,包括名稱空間、數組和語句。這種樣式經常與縮進2個空格和——break-return-type一起使用。
int Foo(bool isBar)
{
if (isBar) {
bar();
return 1;
} else
return 0;
}
2.Tab選項
default indent(如果沒有設定縮進選項,将使用預設選項4個空格(eg::-s4/--indent=spaces=4)。)
void Foo() {
....if (isBar1
............&& isBar2) // indent of this line can be changed with min-conditional-indent
........bar();
}
--indent=spaces / --indent=spaces=# / -s#:每縮進使用#空格(eg::-s3/--indent=spaces=3)。#必須在2到20之間。不指定同default indent
void Foo() {
...if (isBar1
.........&& isBar2) // indent of this line can be changed with min-conditional-indent
......bar();
}
--indent=tab / --indent=tab=# / -t / -t#:使用制表符進行縮進,使用空格進行繼續行對齊。這可以確定無論檢視器的頁籤大小如何,代碼都能正确顯示。将每個縮進當作#空格(例如-t6 /——indent=tab=6)。#必須在2到20之間。如果沒有設定#,将縮進處理為4個空格。
with indent=tab:
void Foo() {
> if (isBar1
> ........&& isBar2) // indent of this line can be changed with min-conditional-indent
> > bar();
}
with style=linux, indent=tab=8:
void Foo()
{
> if (isBar1
> ....&& isBar2) // indent of this line can NOT be changed with style=linux
> > bar();
}
--indent=force-tab / --indent=force-tab=# / -T / -T#:如果可能的話,使用所有制表符縮進。如果連續行不是偶數個制表符,将在末尾添加空格。将每個制表符視為#空格(例如-T6 /——indent=force-tab=6)。#必須在2到20之間。如果沒有設定#,将制表符視為4個空格。
with indent=force-tab:
void Foo() {
> if (isBar1
> > > && isBar2) // indent of this line can be changed with min-conditional-indent
> > bar();
}
--indent=force-tab-x / --indent=force-tab-x=# / -xT / -xT#:這個force-tab選項允許将制表符長度設定為與縮進長度不同的長度。這可能會導緻縮進同時包含制表符和空格。如果可能的話,制表符将用于縮進。如果不能使用制表符縮進,将使用空格代替。此選項設定制表符長度。将每個制表符視為#空格(例如-xT6 /——indent=force-tab-x=6。#必須在2到20之間。如果沒有設定#,将制表符視為8個空格。為了改變縮進長度從預設的4空格選項"indent=force-tab"也必須使用。
with indent=force-tab-x (default tab length of 8 and default indent length of 4):
void Foo() {
....if (isBar1
> ....&& isBar2) // indent of this line can be changed with min-conditional-indent
> bar();
}
3.大括号修飾選項
--attach-namespaces / -xn:大括号總是附加在命名空間語句上。
namespace FooName {
...
}
--attach-classes / -xc: 大括号總是附加在類語句上。
class FooClass {
...
};
--attach-inlines / -xl:所有大括号都附加到類和結構的内聯方法定義(僅c++)
class FooClass
{
void Foo() {
...
}
};
--attach-extern-c / -xk:将大括号附加到帶大括号的extern "C"語句(僅c++)
#ifdef __cplusplus
extern "C" {
#endif
但是函數定義是按照要求的大括号樣式進行格式化的:
extern "C" EXPORT void STDCALL Foo()
{}
--attach-closing-while / -xV:将'do-while'語句的'while'附加到右括号。這優先于大括号樣式和break關閉大括号選項。
do
{
bar();
++x;
}
while x == 1;
becomes:
do
{
bar();
++x;
} while x == 1;
4.縮進選項
--indent-classes / -C:縮進'class'和'struct'通路修飾符'public:', 'protected:'和'private:'(僅c++)
class Foo
{
public:
Foo();
virtual ~Foo();
};
becomes:
class Foo
{
public:
Foo();
virtual ~Foo();
};
--indent-modifiers / -xG:縮進'class '和'struct'通路修飾符'public:', 'protected:'和'private:',縮進一半。如果與縮進類一起使用,這個選項将被忽略。(僅c++)
class Foo
{
public:
Foo();
virtual ~Foo();
};
becomes:
class Foo
{
public:
Foo();
virtual ~Foo();
};
--indent-switches / -S:縮進'switch'塊,以便'case X:'語句在switch塊中縮進。整個case塊是縮進的。
switch (foo)
{
case 1:
a += 1;
break;
case 2:
{
a += 2;
break;
}
}
becomes:
switch (foo)
{
case 1:
a += 1;
break;
case 2:
{
a += 2;
break;
}
}
--indent-cases / -K:縮進'case X:'塊從'case X:'頭。不包含在塊中的Case語句不縮進。
switch (foo)
{
case 1:
a += 1;
break;
case 2:
{
a += 2;
break;
}
}
becomes:
switch (foo)
{
case 1:
a += 1;
break;
case 2:
{
a += 2;
break;
}
}
--indent-namespaces / -N:向名稱空間塊添加額外的縮進
namespace foospace
{
class Foo
{
public:
Foo();
virtual ~Foo();
};
}
becomes:
namespace foospace
{
class Foo
{
public:
Foo();
virtual ~Foo();
};
}
--indent-after-parens / -xU:在包含開頭圓括号'('或指派'='的行後面縮進,包括函數定義、聲明和傳回語句。
void Foo(bool bar1,
bool bar2)
{
isLongFunction(bar1,
bar2);
isLongVariable = foo1
|| foo2;
}
becomes:
void Foo(bool bar1,
bool bar2)
{
isLongFunction(bar1,
bar2);
isLongVariable = foo1
|| foo2;
}
--indent-continuation=# / -xt#:設定以開始的圓括号'('或指派'='結尾的行的延續縮進,包括函數定義和聲明。它還将修改前面的縮進後括号選項。#的值表示大量的縮進。有效值是從0到4的整數值。如果不使用該選項,則使用預設值1。
isLongVariable =
foo1 ||
foo2;
isLongFunction(
bar1,
bar2);
becomes (with indent-continuation=3):
isLongVariable =
foo1 ||
foo2;
isLongFunction(
bar1,
bar2);
--indent-labels / -L:向标簽添加額外的縮進,使它們顯示比目前縮進少1個縮進,而不是向左重新整理(預設)。
void Foo() {
while (isFoo) {
if (isFoo)
goto error;
...
error:
...
}}
becomes (with indented 'error:'):
void Foo() {
while (isFoo) {
if (isFoo)
goto error;
...
error:
...
}
}
--indent-preproc-block / -xW:縮進預處理器塊在大括号級别0,并立即在名稱空間内。對縮進的内容有限制。方法、類、數組等中的塊不會縮進。包含大括号或多行定義語句的塊将不會縮進。沒有此選項,預處理器塊不會縮進。
#ifdef _WIN32
#include <windows.h>
#ifndef NO_EXPORT
#define EXPORT
#endif
#endif
becomes:
#ifdef _WIN32
#include <windows.h>
#ifndef NO_EXPORT
#define EXPORT
#endif
#endif
--indent-preproc-define / -w:縮進以反斜杠結尾的多行預處理器定義。應該與 --convert-tabs一起使用,以獲得正确的結果。做得很好,但不能在模糊預處理定義中執行奇迹。如果沒有這個選項,預處理器語句将保持不變。
#define Is_Bar(arg,a,b) \
(Is_Foo((arg), (a)) \
|| Is_Foo((arg), (b)))
becomes:
#define Is_Bar(arg,a,b) \
(Is_Foo((arg), (a)) \
|| Is_Foo((arg), (b)))
--indent-preproc-cond / -xw:将預處理條件語句縮進到與源代碼相同的級别。
isFoo = true;
#ifdef UNICODE
text = wideBuff;
#else
text = buff;
#endif
becomes:
isFoo = true;
#ifdef UNICODE
text = wideBuff;
#else
text = buff;
#endif
--indent-col1-comments / -Y:從第一列開始縮進c++注釋。預設情況下,從第一列開始的c++注釋被假定為注釋輸出代碼,而不是縮進。此選項将允許注釋與代碼一起縮進。
void Foo()\n"
{// comment
if (isFoo)
bar();
}
becomes:
void Foo()\n"
{
// comment
if (isFoo)
bar();
}
--min-conditional-indent=# / -m#:
設定header由多行組成時添加的最小縮進。這種縮進有助于輕松地将header與後面的指令語句分開。#的值表示縮進的數量,并且是最小值。縮進可能更大,以與前一行的資料對齊。有效值為:
0 - 沒有最小縮進。這些行将與前一行上的括号對齊。
1 - 至少縮進一個額外的縮進。
2 - 縮進至少兩個額外的縮進。
3 - 至少要增加定單的一半。這用于大縮進(例如8)。
預設值是2,兩個額外的縮進。
// default setting makes this non-braced code clear
if (a < b
|| c > d)
foo++;
// but creates an exaggerated indent in this braced code
if (a < b
|| c > d)
{
foo++;
}
becomes (when setting --min-conditional-indent=0):
// setting makes this non-braced code less clear
if (a < b
|| c > d)
foo++;
// but makes this braced code clearer
if (a < b
|| c > d)
{
foo++;
}
--max-continuation-indent=# / -M#:設定#空格的最大長度以縮進延續行。#表示列的數量,且不能小于40或大于120。如果沒有設定,則使用預設值40。此選項将防止延續行向右延伸太遠。設定更大的值将允許代碼進一步向右擴充。
fooArray[] = { red,
green,
blue };
fooFunction(barArg1,
barArg2,
barArg3);
becomes (with larger value):
fooArray[] = { red,
green,
blue };
fooFunction(barArg1,
barArg2,
barArg3);
4.填充選項
--break-blocks / -f:在标題塊周圍填充空行(e.g. 'if', 'for', 'while'...).
isFoo = true;
if (isFoo) {
bar();
} else {
anotherBar();
}
isBar = false;
becomes:
isFoo = true;
if (isFoo) {
bar();
} else {
anotherBar();
}
isBar = false;
--break-blocks=all / -F:在标題塊周圍填充空行(e.g. 'if', 'for', 'while'...).處理關閉頭檔案塊(e.g. 'else', 'catch')作為獨立塊。
isFoo = true;
if (isFoo) {
bar();
} else {
anotherBar();
}
isBar = false;
becomes:
isFoo = true;
if (isFoo) {
bar();
} else {
anotherBar();
}
isBar = false;
--pad-oper / -p:在運算符周圍插入空格。這也會添加逗号。如果可能的話,行尾注釋将保留在原始列中。注意,沒有取消墊的選項。一旦被填充,它們就保持填充狀态。
if (foo==2)
a=bar((b-c)*a,d--);
becomes:
if (foo == 2)
a = bar((b - c) * a, d--);
--pad-comma / -xg:在逗号後插入空格。如果使用pad-oper,則不需要加。行尾注釋将保留在原始列中。
if (isFoo(a,b))
bar(a,b);
becomes:
if (isFoo(a, b))
bar(a, b);
--pad-paren / -P:在括号的外部和内部都插入空格填充。行尾注釋将保留在原始列中。
if (isFoo((a+2), b))
bar(a, b);
becomes:
if ( isFoo ( ( a+2 ), b ) )
bar ( a, b );
--pad-paren-out / -d:隻在括号外面插入空格填充。空的括号不會加襯墊。如果可能的話,行尾注釋将保留在原始列中。這可以用下面的unpad-paren來删除不需要的空間。
if (isFoo((a+2), b))
bar(a, b);
becomes:
if (isFoo ( (a+2), b) )
bar (a, b);
--pad-first-paren-out / -xd:在序列的第一個圓括号周圍隻在外部插入空格填充。空的括号不會加襯墊。行尾注釋将保留在原始列中。可以用unpad-paren删除不需要的空間。如果與pad‑paren或pad‑paren‑out一起使用,該選項将被忽略。
if (isFoo((a+2), b))
bar(a, b);
becomes:
if (isFoo ((a+2), b))
bar (a, b);
--pad-paren-in / -D:隻在裡面插入圓括号周圍的空格。行尾注釋将保留在原始列中。這可以用下面的unpad-paren來删除不需要的空間。
if (isFoo((a+2), b))
bar(a, b);
becomes:
if ( isFoo( ( a+2 ), b ) )
bar( a, b );
--pad-header / -H:在标題之間插入空格(e.g. 'if', 'for', 'while'...)和下面的括号。行尾注釋将保留在原始列中。可以使用unpad-paren删除不需要的空格。
if(isFoo((a+2), b))
bar(a, b);
becomes:
if (isFoo((a+2), b))
bar(a, b);
--unpad-paren / -U:在内外兩邊去掉多餘的填充空間。行尾注釋将保留在原始列中。
if ( isFoo( ( a+2 ), b ) )
bar ( a, b );
becomes (with no padding option requested):
if(isFoo((a+2), b))
bar(a, b);
--delete-empty-lines / -xe:删除函數或方法中的空行。函數或方法之外的空行不會被删除。如果與break-blocks或break-blocks=all一起使用,它将删除除由break-blocks選項添加的行之外的所有行。
void Foo()
{
foo1 = 1;
foo2 = 2;
}
becomes:
void Foo()
{
foo1 = 1;
foo2 = 2;
}
--fill-empty-lines / -E:用前一行的空白填充空行。
--align-pointer=type / -k1
--align-pointer=middle / -k2
--align-pointer=name / -k3
将指針或引用操作符(*、&或^)附加到變量類型(左)或變量名稱(右),或将其放在類型和名稱(中間)之間。如果可能的話,将保留類型和名稱之間的空格。這個選項适用于C/ c++、c++ /CLI和c#檔案。要單獨格式化引用,請使用以下align-reference選項。
char* foo1;
char & foo2;
string ^s1;
becomes (with align-pointer=type):
char* foo1;
char& foo2;
string^ s1;
char* foo1;
char & foo2;
string ^s1;
becomes (with align-pointer=middle):
char * foo1;
char & foo2;
string ^ s1;
char* foo1;
char & foo2;
string ^s1;
becomes (with align-pointer=name):
char *foo1;
char &foo2;
string ^s1;
--align-reference=none / -W0
--align-reference=type / -W1
--align-reference=middle / -W2
--align-reference=name / -W3
該選項将引用與指針分開對齊。指針不會被這個選項改變。如果指針和引用要對齊,請使用前面的對齊指針選項。選項align-reference=none不會改變引用對齊方式。其他選項與對齊指針相同。(僅C/ C++、c++ /CLI和C#檔案)。
char &foo1;
becomes (with align-reference=type):
char& foo1;
char& foo2;
becomes (with align-reference=middle):
char & foo2;
char& foo3;
becomes (with align-reference=name):
char &foo3;
5.格式化選項
--break-closing-braces / -y:當與 --style=java, --style=kr, --style=stroustrup, --style=linux, 或者--style=1tbs同時使用,會打破關閉頭檔案 (e.g. 'else', 'catch', ...) 。結束标題花括号總是與其他樣式一起斷開。
void Foo(bool isFoo) {
if (isFoo) {
bar();
} else {
anotherBar();
}}
becomes (a broken 'else'):
void Foo(bool isFoo) {
if (isFoo) {
bar();
}
else {
anotherBar();
}
}
--break-elseifs / -e:将"else if"标題組合分隔成單獨的行。如果使用keep-one-line語句,則此選項無效,“else if”語句将保持原樣。
如果不使用此選項,"else If "标題組合将被放置在單行上。
if (isFoo) {
bar();
}
else if (isFoo1()) {
bar1();
}
else if (isFoo2()) {
bar2;
}
becomes:
if (isFoo) {
bar();
}
else
if (isFoo1()) {
bar1();
}
else
if (isFoo2()) {
bar2();
}
--break-one-line-headers / -xb:從位于同一行的語句中斷開一行标題(e.g. 'if', 'while', 'else', ...)如果語句用大括号括起來,大括号将根據要求的大括号樣式進行格式化。如果使用keep-one-line-statements,則多語句行不會被斷開。如果使用keep-one-line-blocks,并且報頭包含在塊中,則一行塊不會被打斷。
void Foo(bool isFoo)
{
if (isFoo1) bar1();
if (isFoo2) { bar2(); }}
becomes:
void Foo(bool isFoo)
{
if (isFoo1)
bar1();
if (isFoo2) {
bar2();
}
}
--add-braces / -j:向不帶大括号的單行條件語句添加大括号(例如:“如果”,“對”,“而”……)。大括号将根據要求的大括号樣式添加。如果沒有要求樣式,将附加大括号。如果使用keep-one-line-statements,則不會将大括号添加到多語句行中。如果使用keep-one-line-blocks,則不會将大括号添加到一行塊中。如果與--add-one-line-braces一起使用,結果将是一行大括号。
if (isFoo)
isFoo = false;
becomes:
if (isFoo) {
isFoo = false;
}
--add-one-line-braces / -J:添加一行大括号到不加大括号的一行條件語句 (e.g. 'if', 'for', 'while'...)。該選項意味--keep-one-line-blocks,并且不會打破一行塊。
if (isFoo)
isFoo = false;
becomes:
if (isFoo)
{ isFoo = false; }
--remove-braces / -xj:從條件語句中删除括号(例如:“如果”,“對”,“而”……)。語句必須是單行上的單個語句。如果還使用--add-braces或--add-one-line-braces,結果将是添加大括号。大括号不會從"One True Brace Style"中删除,--style=1tbs。
if (isFoo)
{
isFoo = false;
}
becomes:
if (isFoo)
isFoo = false;
--break-return-type / -xB
--break-return-type-decl / -xD
從函數名中分離傳回類型。這兩個選項用于函數定義(-xB)和函數聲明或簽名(-xD)。如與--attach-return-type一起使用,結果将破壞傳回類型。
void Foo(bool isFoo);
becomes:
void
Foo(bool isFoo);
--attach-return-type / -xf
--attach-return-type-decl / -xh
将傳回類型附加到函數名。這兩個選項用于函數定義(-xf)和函數聲明或簽名(-xh)。它們的目的是撤消--break-return-type選項。如果與--break-return-type一起使用,結果将打破傳回類型。
void
Foo(bool isFoo);
becomes:
void Foo(bool isFoo);
--keep-one-line-blocks / -O:不要打斷一行代碼塊。
if (isFoo)
{ isFoo = false; cout << isFoo << endl; }
remains unchanged.
--keep-one-line-statements / -o:不要打破複雜語句和駐留在一行中的多個語句。
if (isFoo)
{
isFoo = false; cout << isFoo << endl;
}
remains unchanged.
--convert-tabs / -c:将Tab轉換為行非縮進部分中的空格。插入的空格數将保持制表符的間距。使用每個頁籤的空格的目前設定。如果在更改每個頁籤的空格時使用convert-tabs,可能不會産生預期的結果。制表符不會在引号内替換。
--close-templates / -xy:關閉模闆定義結束尖括号之間的空白。
Stack< int, List< int > > stack1;
becomes:
Stack< int, List< int >> stack1;
--remove-comment-prefix / -xp:在以一行開頭的多行注釋中删除前面的'*'。如果末尾有'*',也會被删除。小于一個縮進的文本縮進為一個縮進。不改變大于一個縮進的文本。一行開頭沒有'*'的多行注釋被縮進為一個縮進,以保持一緻性。這可以略微修改注釋掉代碼塊的縮進。包含所有'*'的行保持不變。注釋關閉符'*/'将删除額外的空格。
/*
* comment line 1
* comment line 2
*/
becomes:
/*
comment line 1
comment line 2
*/
--max-code-length=# / -xC#
--break-after-logical / -xL
如果代碼超過#字元,選項max‑code‑length将斷行。有效值為50到200。沒有邏輯條件的行會在邏輯條件(||,&&,…)、逗号、圓括号、分号或空格處中斷。有些代碼不會被破壞,比如注釋、引号和數組。如果與keep‑one‑line‑blocks或add-one-line-braces一起使用,block不會被破壞。如果與keep‑one‑line‑statements一起使用,當行超過最大長度時,語句将以分号分隔。如果在最大代碼長度内沒有可用的斷點,則該行将在最大代碼長度之後的第一個可用斷點處被中斷。預設情況下,邏輯條件将放在新行的第一個位置。選項break‑after‑logical将導緻邏輯條件被放在前一行的最後。如果沒有最大代碼長度,這個選項就不起作用。
if (thisVariable1 == thatVariable1 || thisVariable2 == thatVariable2 || thisVariable3 == thatVariable3)
bar();
becomes:
if (thisVariable1 == thatVariable1
|| thisVariable2 == thatVariable2
|| thisVariable3 == thatVariable3)
bar();
becomes (with break‑after‑logical):
if (thisVariable1 == thatVariable1 ||
thisVariable2 == thatVariable2 ||
thisVariable3 == thatVariable3)
bar();
--mode=c
--mode=cs
--mode=java
縮進一個C類型、c#或Java檔案。C類型檔案有C、c++、c++ /CLI和Objective-C。該選項通常從每個檔案的檔案擴充名設定。您可以使用此條目覆寫該設定。它将用于所有檔案,而不管檔案擴充名是什麼。它允許格式化程式識别特定于語言的文法,如c++類、模闆和關鍵字。