V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zhwguest
V2EX  ›  程序员

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

  •  1
     
  •   zhwguest · 1 天前 · 5778 次点击

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

    66 条回复    2025-02-21 16:48:59 +08:00
    wheat0r
        1
    wheat0r  
       1 天前
    yaml:这事我知道
    maocat
        2
    maocat  
       1 天前 via Android   ❤️ 10
    makefile:莫挨老子
    Configuration
        3
    Configuration  
       1 天前 via iPhone
    国内应该是 2010 年之后,国外更早。
    我自己是因为 tab 在不同平台或编辑器下面呈现的实际宽度不一致,所以换用空格
    jqtmviyu
        5
    jqtmviyu  
       1 天前
    我是两空格党. tab 的展示效果一致性太差.
    lekai63
        6
    lekai63  
       1 天前 via iPhone
    yaml 下 我用 tab

    但写 python 我就按空格。

    你不说我倒是不觉得,你一说 我觉得我有点怪怪的
    cj323
        7
    cj323  
       1 天前   ❤️ 1
    从来没用过空格,tab 能省点字节
    DOLLOR
        8
    DOLLOR  
       1 天前   ❤️ 1
    可能是很多编辑器默认 tab 键=2 个或 4 个空格,然后大部分人懒得改设置,这习惯就被悄悄改变了
    kneo
        9
    kneo  
       1 天前
    个人感觉是 2000 年左右 Java 开始流行的时候。
    luodan
        10
    luodan  
       1 天前
    回想起来可能是从谢耳朵一次跨 8 格楼梯摔到楼下那时候开始的。
    yulon
        11
    yulon  
       1 天前
    回调地狱引起的
    neilp
        12
    neilp  
       1 天前   ❤️ 1
    tab 在不同的编辑器下渲染宽度不统一. 而空格是统一的.
    在某些环境下, 比如 shell, tab 是特殊字符, 而空格是普通字符.
    mayli
        13
    mayli  
       1 天前
    代码编辑器开始自动格式化代码的时候吧,编辑的时候随便按,大部分编辑器都是保存时自动格式化成空格
    netabare
        14
    netabare  
       1 天前 via iPhone
    空格可以组成 tab ,但 tab 没法拆成空格。

    长此以往空格替代 tab 不是很正常的嘛。
    liuran
        15
    liuran  
       1 天前   ❤️ 1
    早期渲染的时候 tab 不一定渲染成几个字符,但是空格就是一个字符,所以空格更可以保持一致性。

    妈的!我他么的有同事混用 tab 和空格,艹!虽然现在 tab 一般都是渲染成 4 个空格长度了。
    chendy
        16
    chendy  
       1 天前
    不知道,因为我一直按的是 tab ,但是不知道从啥时候开始就变成空格了…
    个人倾向是空格,因为代码里可以没有 tab 但是不能没有空格,然后 tab 空格动不动就会接到一起,多少有点难受
    june4
        17
    june4  
       1 天前
    tab 万恶之源,毫无一至性,特别是和空格混和时,完全看不出来,比如多行并一行时
    而且 tab 最大好处是在行首省了按多下空格,但现代编辑器的空格早就有这个功能
    harryWebb
        18
    harryWebb  
       1 天前
    反正我印象中 13 年以后就一直是这样了。。。
    villivateur
        19
    villivateur  
       1 天前
    因为 tab 没法固定长度,导致代码排版很奇怪
    yazinnnn0
        20
    yazinnnn0  
       1 天前
    https://editorconfig.org/

    2025 年了, 用 editorconfig 吧, jb vscode 都有插件支持, 你按 tab 也会按照配置文件里的来

    layxy
        21
    layxy  
       1 天前
    @kneo java 缩进是 tab 不是空格
    Seanfuck
        22
    Seanfuck  
       1 天前
    当然是 javascript ,在网上就没见过用 tab 缩进的 js 代码。
    Seanfuck
        23
    Seanfuck  
       1 天前
    大概就是 nodejs 开始流行的时候
    zhcode
        24
    zhcode  
       1 天前   ❤️ 1
    @luodan #10 这个情节不是生活大爆炸的,是《硅谷》里面的
    justfindu
        25
    justfindu  
       1 天前
    从 2003 左右 高中参加 NOI 开始, 好像一直都是空格. 然后是 JS , HTML , 有时候 Tab 缩进的距离显示太短不好看.
    leonshaw
        26
    leonshaw  
       1 天前 via Android
    拨乱反正
    lisxour
        27
    lisxour  
       1 天前   ❤️ 4
    @yazinnnn0 用的太累了(并不是指 editorconfig ),说个离题的话,一个项目,特别前端,根目录十几个.xxxxx 文件,你一个.xxx ,我一个.yyy ,他一个.zzz ,我 tm 真的
    go522000
        28
    go522000  
       1 天前
    不知道啥时候开始的,印象中是我换第二份工作的时候,2010 年左右吧,印象中这个当时争论挺大的,比较出名的是国外某个大佬的一篇文章的,在 tab 、2 个空格、4 个空格中,他建议是用 2 个空格,他的意思是他在测试 N 多个不同版本的系统与编辑器后,在大多数环境下,2 个空格的长度看起来是一致的,所以建议使用 2 个空格。
    但啥时候变成 4 个空格不知道(只限后端),因为我最近看了几个前端项目,2 个空格的居多。
    RYS
        29
    RYS  
       1 天前
    一直是 tab
    dragondove
        30
    dragondove  
       1 天前
    tab 在不同地方一致性的问题在现在不是问题,主流编辑器/IDE 都支持调整 tab 的显示大小,github 也支持个人设置里设置 tab 的显示大小,或者在地址栏里使用 ?ts=8 参数可以调节代码中 tab 的显示大小。
    tab 的好处就是不同人不同显示设备可以按照个人喜好随意调节而不破坏原本的代码,不过实际使用时可能要用空格补齐对齐,而且不同 ts 大小会导致对齐被破坏。例如下面的 python 代码
    l: list[list[int]] = [[1, 2],
    [3, 4]]
    这里 [3 前需要空格补充对齐,而且换个 ts 可能就会导致左中括号和上一行无法对齐。(例如这个变量名 l 是很长的一串)
    this_is_a_long_variable_name = ... 这样的东西,换个行来对齐就容易出问题
    zhwguest
        31
    zhwguest  
    OP
       1 天前
    我只是好奇啊。

    对了,看到很多朋友说,空格能够方便转 tab ,tab 不容易转空格,我怎么觉得刚好相反呢
    Huelse
        32
    Huelse  
       1 天前
    主要是因为 git 等版本管理工具对这些敏感,为了统一性而选择空格(因为有的人 tab 是 2 个空格,有的人 tab 是 4 个空格),而空格是有几个就是几个,具有一致性。

    另外当时很多编程语言也都优先空格,如 php 和 python...
    williamx
        33
    williamx  
       1 天前
    @dragondove “tab 的好处就是不同人不同显示设备可以按照个人喜好随意调节而不破坏原本的代码”

    这是种幻觉,比“一次编译到处运行”还要虚假。
    zhwguest
        34
    zhwguest  
    OP
       1 天前
    @Huelse #32 难道 tab 没有一致性么?
    duhbbx1119
        35
    duhbbx1119  
       1 天前
    我看到过的就 linux 是用 tab
    luodan
        36
    luodan  
       1 天前
    @zhcode 哦,真是!居然记混了。
    cj323
        37
    cj323  
       1 天前 via iPhone
    @duhbbx1119 go 用 tab ,rob pike 认为渲染结果上的不一致应该计算机去解决而不是敲空格。虽然我用 tab ,但我觉得 rob pike 有点想多了,计算机没那么聪明,不知道每个人喜好,人也没那么勤快到处去放 editorconfig 。以至于 go 在编辑器的显示一致性都做不到。而 go 在 markdown ,html 里的显示更是千奇百怪。
    rahuahua
        38
    rahuahua  
       1 天前
    @jqtmviyu IDE 不是可以设置的么
    jasonyang9
        39
    jasonyang9  
       1 天前 via Android
    除非 tab 和 space 的语义不同,随意
    hzzhzzdogee
        40
    hzzhzzdogee  
       1 天前
    我记得 stackoverflow 当年有一份问卷调查, 结果显示用 space 的比 tab 的薪水略高
    coolloves
        41
    coolloves  
       1 天前
    空格比 tab 的容错率高吧
    Huelse
        42
    Huelse  
       1 天前   ❤️ 1
    @zhwguest #34 这里说的一致性是指显示上的
    tab 宽度为 2

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

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

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

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

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

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

    所以我特别理解用空格的人,用了空格,最起码自己发上去的代码,到哪里都是自己喜欢的缩紧宽度,不管在浏览器里还是别的地方。
    AnkhSpirit
        53
    AnkhSpirit  
       1 天前
    tab 缩进,然后在设置里设置 tab 有几个空格就完事儿了
    pkoukk
        54
    pkoukk  
       1 天前   ❤️ 1
    15 年的时候还有人在讨论用哪个好,今天主流 IDE 都已经用空格代替 Tab 了
    mark2025
        55
    mark2025  
       1 天前
    前端 HTML 用 4 空格(或者 tab 映射 4 )可能都嫌屏幕宽度不够,尤其上了 TypeScript 恐怕就得 2 空格了
    mark2025
        56
    mark2025  
       1 天前
    @cj323 我以前是 tab4 ,后来是 space4 ,再后来就是 space2 了。以前写 js 还是分号党,现在分号也不要了~
    encounter2017
        57
    encounter2017  
       1 天前   ❤️ 1
    > 早些年都是喜欢用 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
        58
    dallaslu  
       1 天前
    所以 go 自带格式化,省得吵这些没有用的
    cj323
        59
    cj323  
       1 天前
    @mark2025 哈哈我有时候 JS 也不用分号,但是有时候需要切回 PHP 或者 C 就会把分号带回来。切 Go 后又会把分号带没 lol
    mark2025
        60
    mark2025  
       1 天前
    @cj323 我使用 VSCode 之后发现分号比较显眼妨碍写代码效率,于是就去掉了。反正有 eslint 自动格式化不怕吸附下一行代码。
    mark2025
        61
    mark2025  
       1 天前
    @misdake 说是这样说,楼上也有人说 tab 方便配置,不过现实是除了编辑器支持而多数现实环境(特别是浏览器)没法配置,在默认情况下 tab 渲染 8 空格宽度那真是一言难尽(见 L42 的图片)
    jqtmviyu
        62
    jqtmviyu  
       23 小时 29 分钟前
    @rahuahua #38 因为有时候是在 debian/openwrt 上用 vim 编辑配置文件. tab 的展示和删除都很难受.
    huzhizhao
        63
    huzhizhao  
       11 小时 47 分钟前
    tab 党路过
    ide 默认设置
    Sfilata
        64
    Sfilata  
       10 小时 14 分钟前
    我是大概好像入行的时候就被教要遵循 Airbnb 的编码规范,里面就包含这个。虽然当时解释了空格相对于 tab 更有一致性,多人编码的时候看起来缩进长短会一致。
    vkleo
        65
    vkleo  
       7 小时 49 分钟前
    交给 ide ,它不缩进,我就忍着,我看跑不通是它着急还是我着急,tmd
    hhjuteman
        66
    hhjuteman  
       4 小时 10 分钟前
    网页端审核代码合并代码,有的界面 tab 是 8 个空格长度的。再把 if else 和循环套几个,代码前面的空白都顶到天上去了,看着就难受,还审核什么呢。
    团队编码有规范的,考虑到 tab 的显示效果不一致,缩进都是空格。后面 git 提交都上检查了,用 tab 缩进的无法合并
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2778 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:59 · PVG 20:59 · LAX 04:59 · JFK 07:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.