Отступ Emacs для каждого оператора в C ++ - PullRequest
1 голос
/ 09 апреля 2009

Я пытаюсь заставить emacs правильно отформатировать конструкцию "для каждого" в c ++.

Я хочу, чтобы скобки были выровнены с f в for в обоих следующих примерах:

for each(Type a in b)
        { //^c^s shows substatement-open
            //... do stuff
        }

for( ; ; )
{ //^c^s shows substatement-open
    //... do stuff
}

В обоих случаях использование [Ctrl-c Ctrl-s] (или [Ctrl-c Ctrl-o]) показывает, что оба открывающих {символа имеют тип substatement-open и при просмотре c-offsets-alist я вижу, что substatement-open равно 0.

Как сделать в emacs отступ для команды for each(), аналогично тому, как она отступает для команды for(;;)?

Ответы [ 2 ]

6 голосов
/ 09 апреля 2009

Предположительно, emacs не распознает "for each" как синтаксис c ++ (я тоже не знаю. Это расширение для Microsoft? Взлом препроцессора? Новое для грядущего стандарта?) Поэтому неудивительно, что он не форматирует его «правильно».

Вы можете взломать режим или попросить его об этом (хотя я не ожидал бы возможного ответа, если только это не будет правильным с ++ Очень скоро).


Из комментариев Ответы на мои вопросы в скобках:

  • Точная форма, о которой спрашивает OP, - это расширение Microsoft managed-c ++.
  • Сейчас доступно BOOST_FOREACH
  • Стенд C ++ 0x будет включать в себя цикл в контейнерах с синтаксисом вроде for( <type> <loopcounter> : <container> )

и из ответа slink кажется, что сопровождающий режим поддерживает синтаксис Microsoft в последних версиях ...

2 голосов
/ 09 апреля 2009

Для меня - в Emacs 23.0.91 - c++-mode отступает блок for each, как это было в обычном цикле for.

...