空格還是Tab?用Vim寫Python縮進的正確姿勢

首先討論一下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 "自動縮進"



作者:姜樂衣
鏈接:http://www.jianshu.com/p/7d27858b8d2b
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章