Регулярное выражение, которое перемещает открывающие {фигурные скобки на новую строку, для кода C / C ++ / PHP / etc - PullRequest
0 голосов
/ 13 мая 2010

Такая структура кода делает, IMHO, код менее читабельным:

int func() {
  [...]
}

Это просто вопрос вкуса, но я предпочитаю это:

int func()
{
  [...]
}

Итак, я пытаюсь сделать регулярное выражение для применения в моем текстовом редакторе, чтобы код в первом примере выглядел как второй.

Я придумал что-то вроде ^([\t]*)([^\t{]*)({.*)$ (точно не помню, было ли это так)
Идея состоит в том, что когда найден {, предшествующий непробельным символам, наиболее вероятно, что заголовок функции или структура управления разбивают строку и отправляют { на следующую строку, но сохраняя уровень отступа столько же вкладок) оригинальной строки.

Последняя часть о поддержании уровня отступа - это то, что я не могу понять правильно.
Любая помощь приветствуется.

-
PS: Не стесняйтесь не соглашаться с моими стандартами кодирования, но, пожалуйста, помните, что это не главная тема здесь.

1 Ответ

0 голосов
/ 09 декабря 2016

Вот первая попытка.

file.cpp:

int main() {
    for (;;) {
        break;
    }
    return 0;
}

Использование sed -r s/^\(\\s*\)\(.*\)\\{$/\\1\\2\\n\\1{/ file.cpp выходов:

int main() 
{
    for (;;) 
    {
        break;
    }
    return 0;
}

Выбор строк с помощью sed

  1. Захватить пробелы в начале строки ^\(\\s*\).
  2. Возьмите все, кроме последней открывающей скобки \(.*\).
  3. Возьмите открывающую скобку до конца строки \\{$.

Замена

  1. Вернуть 1-й и 2-й обратные ссылки \\1\\2.
  2. Вставить новую строку и добавить 1-ю обратную ссылку.
  3. Открытая скобка.
...