为什么一会儿 TAB 一会儿空格啊,怎么设置都不行,快被折磨疯了,救救孩子吧
试过这个,可以达到统一使用空格缩进的效果,但是反过来就不是(跟截图一样) 很奇怪
草,看茬了,全部用 tab 似乎没有什么太好的办法
一通乱试,总算有点效果了,但不知道为啥会这样,
比如说: 前两个效果 indent-tabs-mode 加不加效果都一样
又或者:设置了 c-default-style 如果不设置 tab-width 效果很奇怪 但是 设置 c-default-style 为 gnu,却没事。
可能现阶段我是理解不了其中的原因了,如果有大佬解释一下就好了
设置:
(setq-default tab-width 4)
;;(setq-default indent-tabs-mode nil)
(setq c-default-style "linux")
(setq c-basic-offset 4)
效果:
设置:
(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)
(setq c-default-style "linux")
(setq c-basic-offset 4)
效果:
设置:
;;(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)
(setq c-default-style "linux")
(setq c-basic-offset 4)
效果:
设置:
;;(setq-default tab-width 4)
;;(setq-default indent-tabs-mode nil)
(setq c-default-style "linux")
(setq c-basic-offset 4)
效果:
设置:
(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)
;;(setq c-default-style "stroustrup")
(setq c-basic-offset 4)
效果:
设置:
(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)
(setq c-default-style "gnu")
(setq c-basic-offset 4)
效果:
c-basic-offset
决定了一级缩进用多少个空格;
tab-width
决定了一个tab等价于多少个空格,即 indent-tabs-mode
生效时多少个空格会被转换成一个tab。
所以如果要全部使用tab的话,应当开启 indent-tabs-mode
并保证 c-basic-offset
和 tab-width
相等。你可以把相关的配置写到一个新的style里(参考函数 c-add-style
和变量 c-style-alist
),并修改 c-default-style
以便自动在特定mode下启用你自己定义的style,且不会影响其它mode。
这三个设置项与 c-default-style
有什么关系吗,我发现 gnu
和 其他值在 TAB
和空格
缩进上的效果有所区别。
很多语法和C类似的语言的mode都会继承自 cc mode,而 cc mode 会查询 c-default-style
来选择要使用的 style。c-default-style
里只存了style的名字,具体定义在 c-style-alist
里,你可以去看一下各种style的具体定义,其中包括了你提到的 gnu 和 linux。c-style-alist
里的各个 style 实际上就是设置一下变量的值,比如通常会修改 c-basic-offset
的值,当然你也可以在这里修改tab-width
。 c-basic-offset
是 cc mode 下通用的记录缩进大小的变量。tab-width
是整个Emacs通用的,不仅仅影响 cc mode。
说得有点混乱,举个例子吧
默认 c-style-alist
里关于gnu的设置大概是这样的:
( ;; ...
("gnu"
(c-basic-offset . 2)
;; ...
))
而默认 c-default-style
长这样:
((java-mode . "java")
(awk-mode . "awk")
(other . "gnu")
那么c-mode启动时,
- 查询
c-default-style
,找到other情况下应使用叫做gnu的style - 查找
c-style-alist
,找到gnu对应的配置 - 看到
(c-basic-offset . 2)
,则将c-basic-offset
设置成2
至于你发现gnu与其它的style缩进效果不同,那应该就是不同style中的 c-default-style
不同导致的。
非常感谢您耐心的解答。