;; C++ Mode
(c-set-offset 'access-label '-2)
(c-set-offset 'inclass '4)
(setq c-default-style "k&r"
c-basic-offset 2)
Run Code Online (Sandbox Code Playgroud)
那是我的 C++ 配置。我希望 Emacs 用 2 个空格缩进结构体,就像它缩进函数一样,if/while/for 块,但目前它是这样做的:
struct plane {
//4 spaces'?
};
Run Code Online (Sandbox Code Playgroud)
但是,它这样做:
typedef car {
//2 spaces!
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用c-mode和c++-mode。当我M-x c-set-offset在一个结构体(它当前用 4 个空格缩进)中执行操作时,它会将其检测为topmost-intro(0 个空格),即使在 C++ 模式下也是如此。
基本上,我希望内部结构缩进 2 个空格而不是现在的 4 个空格。(GNU Emacs 24.2.1)
您应该删除配置并从
(custom-set-variables
'(c-basic-offset 2))
Run Code Online (Sandbox Code Playgroud)
这将所有缩进设置为 2 个空格。然后你可以从那里改进。
c-offsets-alist例如,您可以设置为各种元素自定义缩进。或者c-hanging-braces-alist在同一行或下一行配置大括号应该设置的位置。等等。
如果您已经安装了 CC 模式信息文件,您可以浏览它
Ctrl-h i mCC ModeRET
CC 模式不区分class和struct,因为两者的句法元素都是inclass。您只能使用自定义 Line-Up 函数基于 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 '+)))))
Run Code Online (Sandbox Code Playgroud)
这个函数看起来,如果你在 aclass或structor 外面,并相应地返回一个缩进级别。然后你可以在你的c-offsets-alist
(custom-set-variables
'(c-offsets-alist (quote ((access-label . 0)
(topmost-intro . my/c-lineup-inclass)))))
Run Code Online (Sandbox Code Playgroud)