制表符缩进真的不好吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容 style type="text/css"> #Wrapper { background-color: #e2e2e2; background-image: url("/static/img/shadow_light.png"), url("//cdn.v2ex.com/assets/bgs/circuit.png"); background-repeat: repeat-x, repeat-x; } #Wrapper.Night { background-color: #1f2e3d; background-image: url("/static/img/shadow.png"), url("//cdn.v2ex.com/assets/bgs/circuit_night.png"); background-repeat: repeat-x, repeat-x; background-size: 20px 20px, 162.5px 162.5px; }
tioover
V2EX    程序员

制表符缩进真的不好吗?

  •  
  •   tioover
    tioover 2011-06-12 01:38:53 +08:00 8411 次点击
    这是一个创建于 5280 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我一开始也是一直用制表符缩进的,但是据说大家都用空格,制表符在不同编辑器下的表现不统一,于是现在一直在用空格缩进。但是现在有点怀疑制表符缩进真的不好么

    用制表符缩紧虽然表现不统一但是很多编辑器IDE都可以设置的
    在程序中空格有很多作用,但是制表符只用于缩进,可以很好的区分开来
    空格有的时候会缩进错,比如说没对齐,但是制表符就不会
    在没有插件或者IDE辅助的情况下,制表符更方便
    可以随时改变制表符的宽度
    这一条有点牵强:如果从别人那里复制粘贴代码,然后缩进格数不同那就麻烦了
    29 条回复    1970-01-01 08:00:00 +08:00
    9hills
        1
    9hills  
       2011-06-12 01:52:34 +08:00
    关键是统一性,只要在某个项目中统一选一种就行了。编码风格本来就只是项目级别的,再高高不了了。。
    Hyperion
        2
    Hyperion  
       2011-06-12 01:53:47 +08:00
    只用制表符, 别的不用... 方便, 可靠, 两个字: 好使!
    不当传教士也不当喷子, 大伙爱用啥用啥...

    这其实没啥好讨论的, 青菜萝卜的事...
    fly2never
        3
    fly2never  
       2011-06-12 01:55:12 +08:00
    只要小组内统一了,那就是tab方便
    Hyperion
        4
    Hyperion  
       2011-06-12 01:55:54 +08:00
    @9hills 一般都靠ide约束吧... 我见过的好多数编码规范里, 都没写缩进要用什么符号...
    Hyperion
        5
    Hyperion  
       2011-06-12 02:03:17 +08:00
    [注意! 内容修正...]
    简单回顾了一下, 我的说法是错的... 我google到的几份编码规范, 都在开篇就写明了关于缩进的问题...

    typecho [php] (http://docs.typecho.org/phpcoding)
    phpwind [php] (http://www.phpwind.net/simple/?t897983.html)
    qichangxing
        6
    qichangxing  
       2011-06-12 06:48:33 +08:00
    这问题其实说过无数次,空格有利于在各个场景保持一致。
    darasion
        7
    darasion  
       2011-06-12 07:56:32 +08:00
    我得原则:用周围人都用的,随时准备改变,不形成独特的习惯。
    cmonday
        8
    cmonday  
       2011-06-12 09:10:56 +08:00
    我一定会用tab,如果有要求用空格的,我会在写完之后用EditPlus把tab全部转换为4个空格,另存一份。
    我觉得应该出一个类似W3C的标准,强制各种编辑器统一表现,否则不予支持才好!为了这些五花八门的编辑器,我们要放弃最适合缩进的制表符,变成敲4下空格这种容易出错又麻烦的操作,各位不觉得用户体验很差吗!
    lepture
        9
    lepture  
       2011-06-12 09:42:15 +08:00
    @cmonday
    set expandtab
    set ts=4
    set sw=4

    这样就不用敲4下空格了
    ywjno
        10
    ywjno  
       2011-06-12 11:03:14 +08:00
    eclipse里面设置模板,把按一下tab键变成4个空格输出
    haohaolee
        11
    haohaolee  
       2011-06-12 11:06:56 +08:00
    tab派和空格派都有自己的道理啊。
    虽然全部空格能保持一致,但是如果不同的人喜欢不同程度的缩进,那么空格就无法满足这种多样性
    istef
        12
    istef  
       2011-06-12 11:11:38 +08:00
    其实就是习惯了,每个语言都有自己的习惯,或者说是这些语言社区领袖的习惯。我在 python 之前 html Javascript php 全是 tab 缩进,python 后很自觉的就变成俩空格了。。。。
    btw,现在流行的编辑器通常都可以重新定义缩进的行为,比如把 tab 定义成俩空格 :)
    walleve
        13
    walleve  
       2011-06-12 11:58:36 +08:00
    看到家的争论,我解释下...

    在国外的开源程序中,我经常看到的结果是制表符都是跳格而不是空格,跳格==4个空格基本是很多跨平台协作团队会采用的做法,也支持大家这样做。

    但是,一个小小小的问题也要大家注意下,空格和跳格有很大不同,跳格不会占用页面内容,空格则是会被解析的,也就是会消耗系统资源。当然了...每行四个空格,就整体来说,效率影响也基本可以忽略掉的。
    mcfog
        14
    mcfog  
       2011-06-12 13:31:34 +08:00
    用制表符的理由很简单:用空格的时候按左(或退格)要按多下才能缩回一格

    用空格的好处我真没看到过,保持完全一致我觉得说成缺点也不为过,内容(html)和样式(css)要分离说了那么多年了为什么还有那么多程序员没发现用空格缩进其实就是相当于在写<indent style="width:4em" />,用tab相当于<indent />和分离的编辑器设置(每个人喜欢什么宽度自己设什么宽度就好)
    raptium
        15
    raptium  
       2011-06-12 13:53:23 +08:00 via iPad
    如果用对了编辑器 应该感觉不出区别才对
    reus
        16
    reus  
       2011-06-12 17:51:12 +08:00
    设置对了,其实用空格和用制表符是没有区别的
    按一下tab,出来N个空格,按一下退格键,也删掉同样多的空格
    所以,输入或者删除麻烦并不能作为不用空格的理由啊……
    设置一下就ok 的
    tioover
        17
    tioover  
    OP
       2011-06-12 18:04:59 +08:00
    @reus 我就是这样的,但是有的时候空格会误删除啊
    reus
        18
    reus  
       2011-06-12 18:31:17 +08:00
    @tioover 我用vim没有出现过类似情况
    yelusiku
        19
    yelusiku  
       2011-06-13 22:47:06 +08:00
    在vim里设置了expandtab。写ObjC用8空格缩进的人伤不起啊……
    obiwong
        20
    obiwong  
       2011-06-14 00:28:45 +08:00
    如果项目参与的人多了,用TAB就是浪费每个人的时间在配置编辑器上
    Mutoo
        21
    Mutoo  
       2011-06-14 00:51:38 +08:00
    tab 和 space 最大的区别在于,tab可以自动对齐,space不行!
    shellex
        22
    shellex  
       2011-06-14 01:13:35 +08:00 via Android
    go语言推荐使用tab。makefile强制使用tab。说空格不方便的人都不用vim。写程序遵循语言自己的规范。汇报完毕。
    shawiz
        23
    shawiz  
       2011-06-14 01:33:12 +08:00
    只要编辑器支持,制表符和空格根本没有使用上的区别。以前用制表符,后来就一直用 Textmate 上的4空格 Soft Tab 了。
    obiwong
        24
    obiwong  
       2011-06-14 09:32:44 +08:00
    @shellex Makefile的TAB造成了很多问题,Stuart Feldman委婉的承认了这点。见《Unix编程艺术》
    tioover
        25
    tioover  
    OP
       2011-06-14 19:55:48 +08:00
    @obiwong 昨天也看到那一段了的确够委婉的没详细说

    @shellex 用着vim还是感觉tab好=w=
    tioover
        26
    tioover  
    OP
       2011-06-14 19:56:45 +08:00
    @obiwong 设置空格数的时间…这这……
    obiwong
        27
    obiwong  
       2011-06-14 20:16:54 +08:00
    @tioover 看代码的人总是比写代码的人多,空格能方便只是看代码的人。
    这些人可能只看patch,因此不一定用编辑器查看,而会用review工具。碰到这些情况,空格能让原始的缩进保留,TAB则不能做到这点。
    tioover
        28
    tioover  
    OP
       2011-06-14 20:33:40 +08:00
    @obiwong 额是不是打错了?“空格能方便只是看代码的人”
    的确这也是一个问题,空格也有优势
    obiwong
        29
    obiwong  
       2011-06-14 21:01:21 +08:00
    @tioover 改成“使用空格对那帮以批评代码为乐趣的人更友好”???
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2860 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 14:12 PVG 22:12 LAX 06:12 JFK 09:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86