Emacs - переопределение отступа
У меня есть многократно вложенное пространство имен:
namespace first {namespace second {namespace third {
// emacs indents three times
// I want to intend here
} } }
чтобы emacs отступали до третьей позиции. Однако я просто хочу один отступ.
Можно ли просто осуществить этот эффект?
Ответы
Ответ 1
Используйте абсолютный столбец отступов внутри пространства имен:
(defconst my-cc-style
'("gnu"
(c-offsets-alist . ((innamespace . [4])))))
(c-add-style "my-cc-style" my-cc-style)
Затем используйте c-set-style, чтобы использовать свой собственный стиль.
Обратите внимание, что это работает только в С++ - режиме, c-mode не знает 'innamespace'.
Ответ 2
С С++-mode в Emacs 23 мне пришлось сделать вот так:
(defun my-c-setup ()
(c-set-offset 'innamespace [4]))
(add-hook 'c++-mode-hook 'my-c-setup)
Чтобы полностью отключить отступ в пространствах имен, измените [4] на 0.
Ответ 3
ОК, так что, похоже, это работает как в emacs 21, так и по 22:
(defun followed-by (cases)
(cond ((null cases) nil)
((assq (car cases)
(cdr (memq c-syntactic-element c-syntactic-context))) t)
(t (followed-by (cdr cases)))))
(c-add-style "foo"
`(( other . personalizations )
(c-offsets-alist
( more . stuff )
(innamespace
. (lambda (x)
(if (followed-by
'(innamespace namespace-close)) 0 '+))))))
(Первое решение не поддерживает конструкции типа
namespace X { namespace Y {
class A;
namespace Z {
class B;
}
}}
)
Ответ 4
Если вы просто хотите ввести литеральную вкладку, а не меняете схему отступа emacs, C-q TAB
должен работать.
Ответ 5
К сожалению, я не думаю, что emacs имеет отдельный стиль для пространства имен внутри другого пространства имен. Если вы перейдете на внутреннюю линию и сделаете Cc, Co, вы можете изменить стиль самого верхнего стиля, и если вы запустите customize-variable c-offsets-alist
, вы можете отредактировать все различные варианты отступов, которые есть emacs, но для вашего конкретного использования их не существует дело. Вам нужно будет записать его вручную в elisp
Ответ 6
Это работает для меня, наследуется от cc-mode и заменяет пространство имен в 0, иначе, отключает его отступ.
(defconst my-cc-style
'("cc-mode"
(c-offsets-alist . ((innamespace . [0])))))
(c-add-style "my-cc-mode" my-cc-style)