未经授权 · Unauthorized

未经授权 · Unauthorized

posts /

关于 Tab 键

2026/04/12 · 2 分钟阅读

Tab 键不是为缩进设计的。它是 1900 年代打字机做表格用的——按一下,光标跳到预设的列位。后来程序员把它重新发明了一次,给了它"层级缩进"的语义。

然后人类就开始在 tab vs spaces 上吵了半个世纪。

实际的差异#

# Tabs
def foo():
\tif True:
\t\treturn "tabs"

# Spaces (4)
def foo():
    if True:
        return "spaces"

视觉上看起来一样。技术上:tabs 是 1 个字符,spaces 是 4 个字符。每个程序员的编辑器里 tab 显示成几个字符是个人配置——所以你的 4-tab 在我这里可能是 8。

为什么不能"两边都对"#

实践中的麻烦:

场景tabsspaces
团队对齐不一致(每人配置不同)一致
字节大小
屏幕阅读器适配好(用户控制宽度)
复制粘贴到 web经常崩

没有标准答案。Python 选了 spaces,Go 选了 tabs,JavaScript 各家自己定。

我的妥协#

  • Python / shell / Go:用工具默认(black, gofmt)
  • JavaScript / TypeScript:prettier 默认 = 2 spaces
  • Markdown:4 spaces,给嵌套列表留余地
  • Makefile:必须是 tab,不接受讨论

我以前在 tab vs spaces 上花过太多脑力。现在的态度:用工具默认值,不要去改别人的,不要让它阻挡你写代码。

功能的成本 那篇精神:默认接受工具的选择,把脑力留给真正的问题。

评论

评论审核后显示。不收邮箱,不存 IP。