Форматировщик кода / beautifier для C на Linux для пользователя Emacs

Я - пользователь Linux и ищу кодовое устройство, которое будет принимать файлы, содержащие код на языке C, и форматировать их в соответствии со спецификацией. В частности, я ищу:

  • Изменить все отступы на 8 пробелов
  • Форматировать блоки кода последовательно
  • Добавляйте разрывы строк последовательно

Было бы хорошо, если бы у него были и настройки по умолчанию, и возможность настройки. Я предпочитаю бесплатные / открытые решения, когда они доступны. Какие-либо предложения?

ОБНОВЛЕНИЕ: Я должен также отметить, что я - пользователь emacs, и поэтому это может быть специфический вопрос для emacs. Я обновил теги, чтобы отразить это.

6 ответов

Астиль стоит посмотреть.

"indent" и "cb" поставляются с большинством дистрибутивов, которые у меня были...

Вы смотрели на отступ GNU?

Emacs? Это, вероятно, больше, чем вы ищете, но это сделает это...

Если вы хотите, чтобы (внешний) механизм отступов хорошо работал с Emacs, вы должны обязательно настроить соответствие отступов в режиме cc. Есть много встроенных стилей, которые вы можете использовать. И если ни один из них не отвечает вашим потребностям, вы можете настроить параметры (в частности, интерактивная настройка).

Другим, худшим решением будет настроить ваш before-save-hook вызвать схему отступа. Что-то вроде следующего:

(add-hook 'c-mode-common-hook 
     (lambda ()) (add-hook (make-local-variable 'before-save-hook) 
                           'indent-it-all))
(defun indent-it-all ()
  "indent the buffer using indent"
  (shell-command-on-region (point-min) (point-max) "indent" t t))

Это то, что я использую лично, и я думаю, что это удовлетворяет все ваши потребности отступов, вы можете попробовать это, добавив код в ваш файл.emacs. Эта функция заботится о правильном отступе, когда я пишу код:

(defun linux-c-indent ()
  "adjusted defaults for C/C++ mode use"
  (interactive)
  (setq tab-width 8)
  (setq indent-tabs-mode nil) ;;force spaces, to work with dumber editors
  (setq c-basic-offset 8)
  (setq c-set-style "K&R"))

(add-hook 'c-mode-common-hook 'linux-c-indent)

И если я хочу сделать отступ для файлов, написанных другими людьми, я использую следующее:

(defun iwb ()
  "indent whole buffer"
  (interactive)
  (delete-trailing-whitespace)
  (indent-region (point-min) (point-max) nil)
  (untabify (point-min) (point-max)))

Функция iwb запускается каждый раз, когда я открываю "программный" файл в emacs. Таким образом, я всегда вижу хорошо с отступом код. Я тоже могу поставить этот бит кода, если хотите.

Другие вопросы по тегам