Отступ GNU: Как запретить вставку символов новой строки перед `, 'в объявлении структурных массивов?

390
pynexj

Смотрите следующий пример. Я не хочу ,чар в отдельной строке. Я перебираю все indentварианты, но, похоже, никто не за это.

$ 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
Какая версия Linux? harrymc 9 лет назад 0
Версия ОС для меня не имеет значения. Я использую `GNU Indent 2.2.9`. Я могу скомпилировать последнюю версию отступа, если это поможет. pynexj 9 лет назад 0
Возможно, вам придется обратиться к источникам, чтобы узнать, почему `-nbc` не работает, как рекомендовано @DavidPostill. harrymc 9 лет назад 0
`- [n] bc` влияет только на имена переменных, как в` int a, b, c; `. Это не влияет на код инициализации, как в `= {...};`. pynexj 9 лет назад 0

2 ответа на вопрос

0
DavidPostill

Reference 1.7 Declarations:

If the ‘-bc’ option is specified, a newline is forced after each comma in a declaration. For example,

int a, b, c; 

With the ‘-nbc’ option this would look like

int a, b, c; 

You need to use the -nbc option to get the output you want.

Note that this will disable newlines after every , in a declaration.

You may want to look at 1.10 Disabling Formatting to turn off formating for a particular section of code.

For example:

void foo () { /* *INDENT-OFF* */ struct_a arr[] = { {&a, sizeof (a)}, {&b, sizeof (b)}, {&c, sizeof (c)}, {&d, sizeof (d)}, }; /* *INDENT-ON* */ } 
Только что попробовал, но `-nbc` у меня не работает. pynexj 9 лет назад 0
Вы пробовали отключить форматирование? DavidPostill 9 лет назад 0
Для меня нецелесообразно вставлять такие строки «Отключение форматирования» в наш производственный код, и мне может потребоваться регулярно выполнять отступ. pynexj 9 лет назад 0
0
pynexj

Похоже, это так sizeof()запутано indent. Поэтому у меня есть обходной путь: сначала измените все вхождения sizeofс помощью SIZEOF(например, используя sed), затем вызовите indent, а затем SIZEOFвернитесь к 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}, }; } $ 
Я должен сказать, что это звучит очень маловероятно. Проблема, вероятно, более общая, чем эта. harrymc 9 лет назад 0
Я не уверен. Можешь попробовать. pynexj 9 лет назад 0