Отступ в cma-режиме emacs регулируется набором смещений, каждое из которых может быть установлено в соответствии с именем, прикрепленным к смещению.
Открытое-фигурное после оператора if имеет смещение с именем. Если вы измените значение смещения, open-curly будет иметь отступ по-другому Аналогично, open-curly после объявления функции имеет именованное смещение. Продолжения строк в макросе имеют именованное смещение. Метки дел в операторе switch делают циклы while. Все они имеют смещения. Их существует миллион, и все они хранятся в переменной с именем c-offsets-alist
.
Стили, упомянутые в других местах, предоставляют «базовое смещение», которое обычно составляет 2, 4 или 8 пробелов, а затем значение для c-offsets-alist
. У каждого стиля также есть имя, и вы можете создавать собственные стили из других стилей. Как это:
(c-add-style "myCStyle"
'("bsd" ; this must be defined elsewhere - it is in cc-modes.el
(c-basic-offset . 4)
(c-echo-syntactic-information-p . t)
(c-comment-only-line-offset . (0 . 0))
(c-offsets-alist . (
(c . c-lineup-C-comments)
(statement-case-open . 0)
(case-label . +)
(substatement-open . 0)
))
))
Значение для каждого именованного смещения в c-offsets-alist
является одним из:
0
подразумевается, оставить отступ таким же, как и в предыдущей строке
+
подразумевается, увеличить отступ, один дополнительный уровень
-
подразумевается, уменьшить отступ, один дополнительный уровень
Вы также можете использовать ++, - и так далее. Поместите нечто подобное, чтобы определить стиль, в своем файле .emacs. Затем, чтобы автоматически использовать этот стиль при редактировании файлов C, используйте c-set=style
в хуке c-mode, например:
(defun doug-c-mode-hook-fn ()
(cond (window-system
;; use my defined style for all C modules
(c-set-style "myCStyle")
;; never convert leading spaces to tabs
(setq indent-tabs-mode nil)
....
)))
(add-hook 'c-mode-hook 'doug-c-mode-hook-fn)
Следующий вопрос: как определить, какое из названных смещений вам нужно установить для какой-либо конкретной ситуации? Для этого есть приложение. хорошо, не приложение, а функция elisp.
M-x c-set-offset
Отображает, где, по мнению emacs, он находится в исходном файле режима cc. Чтобы использовать это,
поместите курсор в положение, в котором вы хотите узнать имя смещения, или измените смещение. Затем вызовите эту функцию. Он сообщит вам имя смещения для текущего синтаксического элемента.
Если вы измените значение этого именованного элемента в вашем c-offsets-alist для выбранного вами стиля, то, что обычно делается в .emacs или аналогичном ему, тогда отступ
значение будет истинным для всех исходных модулей.