美文网首页Linux+Python+Java
空格还是Tab?用Vim写Python缩进的正确姿势

空格还是Tab?用Vim写Python缩进的正确姿势

作者: 姜乐衣 | 来源:发表于2016-07-09 10:59 被阅读7544次

    首先讨论一下Tab和空格。

    在硅谷第三季中,Richard因为用Tab还是空格的问题和本来情投意合的女孩吵架,甚至于决裂。很多人会觉得这是调侃程序员为了一些毫无意义的小事情“站队”,强迫症。

    事实上,对于程序员来说,其实Tab和空格远远不只是“立场”问题那么简单。

    众所周知,Tab在ASCII码中,编码是9,而空格是32。这也就是说,当我们按下一个Tab的时候,即使它看起来就是8个空格(或者4个空格,不同的环境下,Tab可能显示的效果不同),对于电脑来说,却是完全不一样的东西。这也意味着,对于用字符来描述过程的代码来说,极有可能会是决定性的差异。

    尤其是对于一门用空格缩进来区分代码层次的语言——Python。
    我们来看一段代码。

    1 class MyForm(Form):
    2     value1 = StringField('value1')
    3     value2 = StringField('value2')
    4     value3 = StringField('value3')        #这行用的是Tab缩进
    5     submit = SubmitField('Submit')
    

    看起来这个value3变量和其他的变量没有什么不同,然而却出现了这样的报错——缩进错误。

        value3 = StringField('value3')
        ^
    IndentationError: unexpected indent
    

    其实Python并没有强制要求你用Tab缩进或者用空格缩进,甚至空格按几个都没有强制要求(但在PEP8中建议了使用4个空格作为缩进:https://www.python.org/dev/peps/pep-0008/),但是却绝对!绝对不能混用Tab和空格,那么这里,是不是空格和Tab的区别就显得很大了呢?

    这个时候有的童鞋就要说了,我用PyCharm(或者其他IDE)怎么从来都没有出现这样的问题呢?

    其实,很多IDE对Tab键做了各种各样的优化,其中有一条就是,将Tab键展开为为空格,也就是说,当你按下Tab的时候,IDE实际上帮你把一个「9」转换成了四个(或者八个)「32」。但是要注意,不是所有的IDE都帮你做了这样的工作!同理,对于好纯洁好不做作的编辑器Vim来说,肯定也不会帮你做这样的工作了。

    既然Tab在不同的环境下展现不一样,而空格却永远都是一样的。对于一些细致排版缩进来说(比如说想把每一行的注释都对齐),用空格也更加精确。这样看起来,确实是用空格来写代码要好于用Tab呢。

    可是每次缩进都要按好多下空格好烦!难道要抛弃用Vim转投各种IDE吗?

    其实,只要掌握好正确的姿势,在使用前配置好.vimrc,就可以玩转Tab啦。

    下面结合具体属性来讲解。

    set shiftwidth=4 "这个量是每行的缩进深度,一般设置成和tabstop一样的宽度"
    set tabstop=4 "设置Tab显示的宽度,Python建议设置成4"
    
    "刚才说过Tab和空格是不同的,虽然你可以在自己的代码中全部使用Tab"
    "但是如果你将你的代码分享给使用空格的朋友,就会带来很多麻烦"
    "那么设置下面这行就可以将Tab自动展开成为空格"
    set expandtab
    "如果只想在Python文件中将Tab展开成空格,就改换成下面这句"
    autocmd FileType python set expandtab
    
    "上面的一些配置已经可以让你避免编译出现错误的问题了"
    
    "不过下面还有一些配置是建议同学们根据需要加上的"
    set smartindent "智能缩进"
    set cindent "C语言风格缩进"
    set autoindent "自动缩进"
    
    
    

    相关文章

      网友评论

        本文标题:空格还是Tab?用Vim写Python缩进的正确姿势

        本文链接:https://www.haomeiwen.com/subject/zhyrjttx.html