;; C++ Mode
(c-set-offset 'access-label '-2)
(c-set-offset 'inclass '4)
(setq c-default-style "k&r"c-basic-offset 2)
Это моя конфигурация C ++. Я хочу, чтобы Emacs делал отступы для структур с двумя пробелами, точно так же, как для отступов функций, если / while / для блоков, но в настоящее время он делает это:
struct plane {
//4 spaces'?
};
Тем не менее, это делает это:
typedef car {
//2 spaces!
}
Я пытался с помощью c-mode
а также c++-mode
, Когда я делаю M-x c-set-offset
внутри структуры (где он в настоящее время имеет отступ с 4 пробелами), он обнаруживает его как topmost-intro
(0 пробелов), даже в режиме C ++.
По сути, я хочу, чтобы внутренние структуры имели отступ с 2 пробелами вместо 4 пробелов, как сейчас. (GNU Emacs 24.2.1)
Вы должны удалить свою конфигурацию и начать с
(custom-set-variables
'(c-basic-offset 2))
Это устанавливает все отступы в 2 пробела.
Тогда вы можете улучшить с этого момента.
Вы можете установить c-offsets-alist
например, чтобы настроить отступ для различных элементов. Или же c-hanging-braces-alist
настроить, где ваши скобки должны быть установлены, на той же или на следующей строке. И так далее.
Если вы установили файлы информации о режиме CC, вы можете просмотреть их с помощью
Ctrl-h я мРежим CCRET
Режим CC не различает class
а также struct
для обоих синтаксический элемент inclass
, Вы можете иметь другой отступ на основе структуры только с Пользовательская функция линейки
(defun my/c-lineup-inclass (langelem)
(let ((inclass (assoc 'inclass c-syntactic-context)))
(if (not inclass)
0
(save-excursion
(goto-char (c-langelem-pos inclass))
(if (looking-at "struct") 0 '+)))))
Эта функция выглядит, если вы находитесь внутри class
или же struct
или снаружи и возвращает уровень отступа соответственно. Вы можете использовать это в своем c-offsets-alist
(custom-set-variables
'(c-offsets-alist (quote ((access-label . 0)
(topmost-intro . my/c-lineup-inclass)))))
Других решений пока нет …