Форматировщик кода / beautifier для C на Linux для пользователя Emacs
Я - пользователь Linux и ищу кодовое устройство, которое будет принимать файлы, содержащие код на языке C, и форматировать их в соответствии со спецификацией. В частности, я ищу:
- Изменить все отступы на 8 пробелов
- Форматировать блоки кода последовательно
- Добавляйте разрывы строк последовательно
Было бы хорошо, если бы у него были и настройки по умолчанию, и возможность настройки. Я предпочитаю бесплатные / открытые решения, когда они доступны. Какие-либо предложения?
ОБНОВЛЕНИЕ: Я должен также отметить, что я - пользователь emacs, и поэтому это может быть специфический вопрос для emacs. Я обновил теги, чтобы отразить это.
6 ответов
"indent" и "cb" поставляются с большинством дистрибутивов, которые у меня были...
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. Таким образом, я всегда вижу хорошо с отступом код. Я тоже могу поставить этот бит кода, если хотите.