配置如下
(defun eye-setup-c++ ()
(setq-default tab-width 4)
(setq tab-width 4)
;; 用k&r风格经常会突然变成tab为5个空格长度,换成stroustrup
(setq-default c-default-style "stroustrup")
(setq c-default-style "stroustrup")
;; outline fold
(outline-minor-mode 1)
(setq outline-regexp "^class\\|^struct\\|^enum\\|^[a-zA-Z][a-zA-Z0-9 _&\*]+::")
(build-command)
(yas-minor-mode 1)
(define-key c++-mode-map (kbd "<M-up>") 'beginning-of-defun)
(define-key c++-mode-map (kbd "<M-down>") 'end-of-defun)
(define-key c++-mode-map (kbd "<f5>") 'make-without-asking)
)
(add-hook 'c++-mode-hook #'eye-setup-c++)
(add-hook 'c-mode-hook #'eye-setup-c++)
c-default-style 原来是用的k&r,好不容易换成 stroustrup,稳定了一段时间,今天又出现这样的情况
每次缩进出问题后,都要revert-buffer一下,重新按tab或者重新输入,才正常。
Youmu
5
可以参考一下我的配置,手工设置了 c-offset-alist
光标处输入个字符,按tab,就是对应的锁进命令呢?
是手输,还是yas展开的?
在{的地方按tab呢?
提供一个思路参考:可以C-h,k
检查一下回车(RET)按键绑定的是哪个命令,也许是该命令配置中加了其他的indent。
我遇到过类似的情况,然后恢复回车为 newline
,缩进就好了。
在 { 处按tab,也是前面缩进两个空格
在 { 的下一行输入字符,按tab,有缩进4个空格
我的设置,用了很久了
1, 默认开启 google-c-style
;;; google-c-style
(use-package google-c-style
:after cc-mode
:defer nil
:config
(defun my/google-c-style-c/c++-mode-hook()
(c-toggle-auto-hungry-state 1)
"because php-mode derived from c-mode, makesure major-mode is c-mode or c++-mode before apply google-c-style"
(when (or (c-major-mode-is 'c-mode) (c-major-mode-is 'c++-mode))
(google-set-c-style)
(google-make-newline-indent)))
(add-hook 'c-mode-common-hook 'my/google-c-style-c/c++-mode-hook))
2, 编辑别人的代码的时候手工开启dtrt-indent-mode,遵循当前代码缩进风格
3, 使用 format-all-mode 按项目的 .clang-format
设置统一代码风格
1 个赞
是的,除了像写 go 之类强制自动格式化的语言,dtrt-indent 还是很有用处的,毕竟真的不想因为改了几行代码结果由于自动格式化导致 git 的提交出现太多莫名其妙的改动。
1 个赞