Как изменить отступы структуры Emacs с 4 на 2 пробела

;; 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)

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)))))
4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector