Отступ директивы препроцессора как код C в Emacs - PullRequest
4 голосов
/ 12 января 2011

Emacs по умолчанию не создает отступ для кода препроцессора. Я знаю, что у него есть исторические корни, которые уже устарели.

Однако, код с большим количеством незафиксированных #ifdef трудно читать.

Итак, я хотел бы, чтобы автоматические отступы в emacs давали мне что-то вроде этого:

void myfunc() {
    int foo;

    #ifdef BAR
    printf(foo);
    #endif

    return foo;
}

Вместо того, что я получаю сейчас:

void myfunc() {
    int foo;

#ifdef BAR
    printf(foo);
#endif

    return foo;
}

Есть ли у вас сведения по этому вопросу, хакеры из emacs :)?

1 Ответ

12 голосов
/ 12 января 2011

Вы можете просто сказать Emacs добавить смещение к линиям препроцессора.

  • Поместить курсор (point) в строку препроцессора
  • затем нажмите C-c C-o (control-c control-o)
  • минибуфер должен сказать Syntactic symbol to change:,
  • введите cpp-macro, нажмите Введите
  • Введите новое смещение (число - обычно 0)

Тогда TAB в каждой строке препроцессора должно правильно сделать отступ. (или М-х indent-region ...).

Чтобы изменения были установлены постоянно, вы можете, например, добавить необходимые строки в файл .emacs.
Простой способ скопировать ранее введенную команду - c-x ESC ESC и использовать клавиши со стрелками для поиска команды (c-set-offset ...) Elisp.

Это должно быть

(c-set-offset (quote cpp-macro) 0 nil)
...