缩进使用空格而不是跳格这个风是什么时候刮起的?

2025 年 2 月 19 日
 zhwguest

不知不觉用了 10 年了,记得在早些年都是喜欢用 tab 而不是 space 的。

7683 次点击
所在节点    程序员
66 条回复
sparkssssssss
2025 年 2 月 20 日
空格比 tab 的容错率高吧
Huelse
2025 年 2 月 20 日
@zhwguest #34 这里说的一致性是指显示上的
tab 宽度为 2

tab 宽度为 8 (以前一些 terminal 里的默认值)
misdake
2025 年 2 月 20 日
很好奇缩进的显示一致性有啥用。每个人能根据自己的喜好决定显示效果是件好事嘛,就和设置显示字体一样。
james122333
2025 年 2 月 20 日
我爱 tab 终端机显示切换也更方便
vim 下也很好分 set list 就可以列出特殊字元 set nolist 取消
youyouzi
2025 年 2 月 20 日
james122333
2025 年 2 月 20 日
vim 下缩排也很方便
yshtcn
2025 年 2 月 20 日
在看到这个讨论之前,我还以为是因为 python 的流行。

因为早期我还在学 c#的时候,那时候缩进不是必须的,你愿意的话可以把几行写在一行。

但是 python 就要求必须缩进,然后编辑器也会自动把 tab 转四个空格
Greendays
2025 年 2 月 20 日
我用的 IDE 好像都是自动把 tab 转成空格的
Sinksky
2025 年 2 月 20 日
问就是 space 方便自动排版跟对齐缩进,看起来更美观。tab 也就字符少点有点优势,感觉显示宽度自由这些说法有点鸡肋,没啥实际用处。
spadger
2025 年 2 月 20 日
我只用 tab 缩进。想显示几个空格编辑器设置改一下就行了。
lslqtz
2025 年 2 月 20 日
基本上只在开头用 tab, 因为方便修改缩进和对齐, 相比 space 在修改时更准确, 而且也能兼顾到不同人的缩进习惯 (比如有些人喜欢 2 字符, 有些人喜欢 4 字符).

缺点是有些语言缩进长度会影响观感.
cj323
2025 年 2 月 20 日
@misdake 理论上当然是用 tab 对阅读者更自由,每个人都可以定义自己喜欢的宽度。

但现实是没人愿意花精力到处改参数。哪怕有那个精力,一开始也是默认值。而默认值如果不是当前使用者喜欢的宽度,也会被“膈应”一下。

更不用说很多 GUI 没法设置 tab 宽度,浏览器就是一个。每次看网页文档时,我都想把 Chrome“革命”一下,让他也能设置 tab size ,让所有网上的代码都是我最喜欢的 tab 宽度。当然,这是我想多了。

所以我特别理解用空格的人,用了空格,最起码自己发上去的代码,到哪里都是自己喜欢的缩紧宽度,不管在浏览器里还是别的地方。
v2AKS
2025 年 2 月 20 日
tab 缩进,然后在设置里设置 tab 有几个空格就完事儿了
pkoukk
2025 年 2 月 20 日
15 年的时候还有人在讨论用哪个好,今天主流 IDE 都已经用空格代替 Tab 了
mark2025
2025 年 2 月 20 日
前端 HTML 用 4 空格(或者 tab 映射 4 )可能都嫌屏幕宽度不够,尤其上了 TypeScript 恐怕就得 2 空格了
mark2025
2025 年 2 月 20 日
@cj323 我以前是 tab4 ,后来是 space4 ,再后来就是 space2 了。以前写 js 还是分号党,现在分号也不要了~
encounter2017
2025 年 2 月 20 日
> 早些年都是喜欢用 tab 而不是 space 的
这个表述缺乏论据支持呀

http://ukupat.github.io/tabs-or-spaces/
一个比较老的统计,各个语言 tabs 和 spaces 的使用情况

对于某个语言来说,90% 以上使用的选项( 4 spaces, 2 spaces, tabs, 网站还统计了 3spaces 和 8 spaces 这里不与列出) 如下:

4 spaces:
- Python (1991 ,PEP8 官方规范, 混用的怕不是没挨过 inconsistent use of tabs and spaces in indentation 的毒打)
- Rust ( 2010, 社区约定 4 空格,工具链( rustfmt )默认支持。)

2 spaces:
- Crystal (2014, 继承 Ruby 风格)
- Pascal ( 1970 )
- Clojure (2007)
- Common Lisp (1984)
- Elicxir (2012)
- Ocaml (1996)
- Ruby (1995)
- Scala (2004)

tabs:
- Go ( 2009, 语言强制)
dallaslu
2025 年 2 月 20 日
所以 go 自带格式化,省得吵这些没有用的
cj323
2025 年 2 月 20 日
@mark2025 哈哈我有时候 JS 也不用分号,但是有时候需要切回 PHP 或者 C 就会把分号带回来。切 Go 后又会把分号带没 lol
mark2025
2025 年 2 月 20 日
@cj323 我使用 VSCode 之后发现分号比较显眼妨碍写代码效率,于是就去掉了。反正有 eslint 自动格式化不怕吸附下一行代码。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1112762

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX