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

struct plane {
    //4 spaces'?
};

但是,它这样做:

typedef car {
  //2 spaces!
}

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

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

4

1 回答 1

5

您应该删除您的配置并开始

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

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

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

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

Ctrl-h i mCC ModeRET

CC 模式不区分classand struct,因为两者的句法元素都是inclass. 您可以基于 struct 仅使用自定义 Line-Up 函数具有不同的缩进

(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)))))
于 2013-02-18T16:08:34.147 回答