Gedankenstrich: Wie kann man das Einfügen von Zeilenumbrüchen vor ',' bei der Deklaration von struct-Arrays verbieten?

543
pynexj

Siehe folgendes Beispiel. Ich möchte das ,Zeichen nicht in einer separaten Zeile. Ich gehe alle indentOptionen durch, scheint aber dafür niemand zu sein.

$ indent -version GNU indent 2.2.9 $ cat foo.c void foo () { struct_a arr[] = { {&a, sizeof (a)}, {&b, sizeof (b)}, {&c, sizeof (c)}, {&d, sizeof (d)}, }; } $ indent -st foo.c void foo () { struct_a arr[] = { {&a, sizeof (a)}, {&b, sizeof (b)}, {&c, sizeof (c)}, {&d, sizeof (d)}, }; } $ 
1
Welche Linux-Version? harrymc vor 9 Jahren 0
Die OS-Version spielt für mich keine Rolle. Ich verwende "GNU Indent 2.2.9". Ich kann die neueste Version von indent kompilieren, wenn das helfen würde. pynexj vor 9 Jahren 0
Möglicherweise müssen Sie in die Quellen gehen, um herauszufinden, warum `-nbc` nicht wie von @DavidPostill empfohlen funktioniert. harrymc vor 9 Jahren 0
`- [n] bc` betrifft nur die Variablennamen wie in` int a, b, c; `. Es wirkt sich nicht auf den Initialisierungscode aus wie in `= {...};`. pynexj vor 9 Jahren 0

2 Antworten auf die Frage

0
DavidPostill

Verweis 1.7 Erklärungen :

Wenn die Option '-bc' angegeben ist, wird nach jedem Komma in einer Deklaration ein Zeilenumbruch erzwungen. Zum Beispiel,

int a, b, c; 

Mit der Option '-nbc' würde dies aussehen

int a, b, c; 

Sie müssen die -nbcOption verwenden, um die gewünschte Ausgabe zu erhalten.

Beachten Sie, dass dies die Zeilenumbrüche nach jeder ,Deklaration deaktiviert .

Sie können unter 1.10 Formatierung deaktivieren, um das Formatieren eines bestimmten Codeabschnitts zu deaktivieren.

Zum Beispiel:

void foo () { /* *INDENT-OFF* */ struct_a arr[] = { {&a, sizeof (a)}, {&b, sizeof (b)}, {&c, sizeof (c)}, {&d, sizeof (d)}, }; /* *INDENT-ON* */ } 
Nur versucht, aber "-nbc" funktioniert bei mir nicht. pynexj vor 9 Jahren 0
Haben Sie die Option zum Deaktivieren der Formatierung ausprobiert? DavidPostill vor 9 Jahren 0
Es ist nicht praktikabel für mich, solche Deaktivierungsformatierungsstrings in unseren Produktionscode einzufügen, und ich muss möglicherweise regelmäßig den Einzug ausführen. pynexj vor 9 Jahren 0
0
pynexj

Scheint so, als wäre es sizeof()so verwirrt indent. Ich habe also eine Problemumgehung: Ändern Sie zunächst alle Vorkommen von sizeofmit SIZEOF(z. B. using sed), rufen Sie sie auf indentund wechseln Sie dann SIZEOFwieder zu sizeof.

$ cat foo.c void foo() { struct_a arr[] = { {&a, sizeof (a), 1}, {&b, sizeof (b), 1}, {&c, sizeof (c), 1}, {&d, sizeof (d), 1}, }; } $ indent -st foo.c void foo () { struct_a arr[] = { {&a, sizeof (a), 1}, {&b, sizeof (b), 1}, {&c, sizeof (c), 1}, {&d, sizeof (d), 1}, }; } $ sed s/sizeof/SIZEOF/g foo.c | indent -st | sed s/SIZEOF/sizeof/g void foo () { struct_a arr[] = { {&a, sizeof (a), 1}, {&b, sizeof (b), 1}, {&c, sizeof (c), 1}, {&d, sizeof (d), 1}, }; } $ 
Ich muss sagen, dass dies sehr unwahrscheinlich klingt. Das Problem ist wahrscheinlich allgemeiner. harrymc vor 9 Jahren 0
Ich bin mir nicht sicher. Du kannst es versuchen. pynexj vor 9 Jahren 0