Emacs - переопределить отступ - PullRequest
23 голосов
/ 12 апреля 2010

У меня есть многократное вложенное пространство имен:

namespace first {namespace second {namespace third {
              // emacs indents three times
    // I want to intend here
} } }

поэтому Emacs отступает на третью позицию. Однако я просто хочу один отступ.
Можно ли просто добиться этого эффекта?

Ответы [ 6 ]

24 голосов
/ 13 апреля 2010

Использовать столбец абсолютного отступа внутри пространства имен:

(defconst my-cc-style
  '("gnu"
    (c-offsets-alist . ((innamespace . [4])))))

(c-add-style "my-cc-style" my-cc-style)

Затем используйте c-set-style , чтобы использовать свой собственный стиль.

Обратите внимание, что это работает только в c ++ - режиме , c-mode не знает «пространство имен».

17 голосов
/ 28 марта 2014

С c ++ - режимом в Emacs 23 мне пришлось сделать так:

(defun my-c-setup ()
   (c-set-offset 'innamespace [4]))
(add-hook 'c++-mode-hook 'my-c-setup)

Чтобы вообще отключить отступ в пространствах имен, измените [4] на 0.

4 голосов
/ 01 июля 2010

ОК, так что, похоже, это работает как в 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;
    }
}}

)

1 голос
/ 12 октября 2012

Это работает для меня, наследовать от cc-mode и заменить отступ пространства имен на 0, иначе отключить его отступ.

(defconst my-cc-style
  '("cc-mode"
    (c-offsets-alist . ((innamespace . [0])))))

(c-add-style "my-cc-mode" my-cc-style)
1 голос
/ 12 апреля 2010

К сожалению, я не думаю, что в emacs есть отдельный стиль для пространства имен внутри другого пространства имен. Если вы переходите на внутреннюю строку и выполняете Cc, Co, вы можете изменить стиль topmost-intro, а если вы запустите customize-variable c-offsets-alist, вы сможете редактировать все различные параметры отступов, которые есть в emacs, но один не существует для вашего конкретного использования. дело. Вам нужно будет написать это вручную в elisp

1 голос
/ 12 апреля 2010

Если вы просто хотите ввести буквенную вкладку, а не изменять схему отступов в emacs, C-q TAB должно работать.

...