如何将Emacs结构缩进从4个空格更改为2个空格

时间:2013-02-18 15:22:20

标签: c++ emacs struct

;; 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用2个空格缩进结构,就像它是缩进函数一样,if / while / for blocks,但是目前它是这样做的:

struct plane {
    //4 spaces'?
};

然而,它是这样做的:

typedef car {
  //2 spaces!
}

我尝试使用c-modec++-mode。当我在结构体内进行M-x c-set-offset时(当前它正在缩进4个空格),它会将其检测为topmost-intro(0个空格),即使在C ++模式下也是如此。

基本上,我希望内部结构缩进2个空格而不是4个空格,就像现在一样。 (GNU Emacs 24.2.1)

1 个答案:

答案 0 :(得分:4)

您应该删除配置并以

开头
(custom-set-variables
 '(c-basic-offset 2))

这会将所有缩进设置为2个空格。 然后你可以从那里改进。

例如,您可以设置c-offsets-alist来自定义各种元素的缩进。或c-hanging-braces-alist配置您的大括号的位置,在同一行或下一行。等等。

如果您已安装CC模式信息文件,则可以使用

进行浏览

Ctrl-h i m CC模式 RET

CC模式不区分classstruct,因为句法元素都是inclass。您可以基于仅具有Custom Line-Up Function

的struct进行不同的缩进
(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 '+)))))

如果您位于classstruct或外部并且相应地返回缩进级别,则此函数会显示。然后,您可以在c-offsets-alist

中使用此功能
(custom-set-variables
 '(c-offsets-alist (quote ((access-label . 0)
                           (topmost-intro . my/c-lineup-inclass)))))