空格還是Tab栏饮?用Vim寫(xiě)Python縮進(jìn)的正確姿勢(shì)

首先討論一下Tab和空格吊说。

在硅谷第三季中论咏,Richard因?yàn)橛肨ab還是空格的問(wèn)題和本來(lái)情投意合的女孩吵架,甚至于決裂颁井。很多人會(huì)覺(jué)得這是調(diào)侃程序員為了一些毫無(wú)意義的小事情“站隊(duì)”厅贪,強(qiáng)迫癥。

事實(shí)上雅宾,對(duì)于程序員來(lái)說(shuō)养涮,其實(shí)Tab和空格遠(yuǎn)遠(yuǎn)不只是“立場(chǎng)”問(wèn)題那么簡(jiǎn)單。

眾所周知眉抬,Tab在ASCII碼中贯吓,編碼是9,而空格是32吐辙。這也就是說(shuō),當(dāng)我們按下一個(gè)Tab的時(shí)候蘸劈,即使它看起來(lái)就是8個(gè)空格(或者4個(gè)空格昏苏,不同的環(huán)境下,Tab可能顯示的效果不同)威沫,對(duì)于電腦來(lái)說(shuō)贤惯,卻是完全不一樣的東西。這也意味著棒掠,對(duì)于用字符來(lái)描述過(guò)程的代碼來(lái)說(shuō)孵构,極有可能會(huì)是決定性的差異。

尤其是對(duì)于一門(mén)用空格縮進(jìn)來(lái)區(qū)分代碼層次的語(yǔ)言——Python烟很。
我們來(lái)看一段代碼颈墅。

1 class MyForm(Form):
2     value1 = StringField('value1')
3     value2 = StringField('value2')
4     value3 = StringField('value3')        #這行用的是Tab縮進(jìn)
5     submit = SubmitField('Submit')

看起來(lái)這個(gè)value3變量和其他的變量沒(méi)有什么不同,然而卻出現(xiàn)了這樣的報(bào)錯(cuò)——縮進(jìn)錯(cuò)誤雾袱。

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

其實(shí)Python并沒(méi)有強(qiáng)制要求你用Tab縮進(jìn)或者用空格縮進(jìn)恤筛,甚至空格按幾個(gè)都沒(méi)有強(qiáng)制要求(但在PEP8中建議了使用4個(gè)空格作為縮進(jìn):https://www.python.org/dev/peps/pep-0008/),但是卻絕對(duì)芹橡!絕對(duì)不能混用Tab和空格毒坛,那么這里,是不是空格和Tab的區(qū)別就顯得很大了呢?

這個(gè)時(shí)候有的童鞋就要說(shuō)了煎殷,我用PyCharm(或者其他IDE)怎么從來(lái)都沒(méi)有出現(xiàn)這樣的問(wèn)題呢屯伞?

其實(shí),很多IDE對(duì)Tab鍵做了各種各樣的優(yōu)化豪直,其中有一條就是劣摇,將Tab鍵展開(kāi)為為空格,也就是說(shuō)顶伞,當(dāng)你按下Tab的時(shí)候饵撑,IDE實(shí)際上幫你把一個(gè)「9」轉(zhuǎn)換成了四個(gè)(或者八個(gè))「32」。但是要注意唆貌,不是所有的IDE都幫你做了這樣的工作滑潘!同理,對(duì)于好純潔好不做作的編輯器Vim來(lái)說(shuō)锨咙,肯定也不會(huì)幫你做這樣的工作了语卤。

既然Tab在不同的環(huán)境下展現(xiàn)不一樣,而空格卻永遠(yuǎn)都是一樣的酪刀。對(duì)于一些細(xì)致排版縮進(jìn)來(lái)說(shuō)(比如說(shuō)想把每一行的注釋都對(duì)齊)粹舵,用空格也更加精確。這樣看起來(lái)骂倘,確實(shí)是用空格來(lái)寫(xiě)代碼要好于用Tab呢眼滤。

可是每次縮進(jìn)都要按好多下空格好煩!難道要拋棄用Vim轉(zhuǎn)投各種IDE嗎?

其實(shí)历涝,只要掌握好正確的姿勢(shì)诅需,在使用前配置好.vimrc,就可以玩轉(zhuǎn)Tab啦荧库。

下面結(jié)合具體屬性來(lái)講解堰塌。

set shiftwidth=4 "這個(gè)量是每行的縮進(jìn)深度,一般設(shè)置成和tabstop一樣的寬度"
set tabstop=4 "設(shè)置Tab顯示的寬度分衫,Python建議設(shè)置成4"

"剛才說(shuō)過(guò)Tab和空格是不同的场刑,雖然你可以在自己的代碼中全部使用Tab"
"但是如果你將你的代碼分享給使用空格的朋友,就會(huì)帶來(lái)很多麻煩"
"那么設(shè)置下面這行就可以將Tab自動(dòng)展開(kāi)成為空格"
set expandtab
"如果只想在Python文件中將Tab展開(kāi)成空格蚪战,就改換成下面這句"
autocmd FileType python set expandtab

"上面的一些配置已經(jīng)可以讓你避免編譯出現(xiàn)錯(cuò)誤的問(wèn)題了"

"不過(guò)下面還有一些配置是建議同學(xué)們根據(jù)需要加上的"
set smartindent "智能縮進(jìn)"
set cindent "C語(yǔ)言風(fēng)格縮進(jìn)"
set autoindent "自動(dòng)縮進(jìn)"


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牵现,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子邀桑,更是在濱河造成了極大的恐慌施籍,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件概漱,死亡現(xiàn)場(chǎng)離奇詭異丑慎,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)竿裂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)玉吁,“玉大人,你說(shuō)我怎么就攤上這事腻异〗保” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵悔常,是天一觀的道長(zhǎng)影斑。 經(jīng)常有香客問(wèn)我,道長(zhǎng)机打,這世上最難降的妖魔是什么矫户? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮残邀,結(jié)果婚禮上皆辽,老公的妹妹穿的比我還像新娘。我一直安慰自己芥挣,他們只是感情好驱闷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著空免,像睡著了一般空另。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蹋砚,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天扼菠,我揣著相機(jī)與錄音,去河邊找鬼都弹。 笑死娇豫,一個(gè)胖子當(dāng)著我的面吹牛匙姜,可吹牛的內(nèi)容都是我干的畅厢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼氮昧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼框杜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起袖肥,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤咪辱,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后椎组,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體油狂,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了专筷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弱贼。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖磷蛹,靈堂內(nèi)的尸體忽然破棺而出吮旅,到底是詐尸還是另有隱情,我是刑警寧澤味咳,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布庇勃,位于F島的核電站,受9級(jí)特大地震影響槽驶,放射性物質(zhì)發(fā)生泄漏责嚷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一捺檬、第九天 我趴在偏房一處隱蔽的房頂上張望再层。 院中可真熱鬧,春花似錦堡纬、人聲如沸聂受。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蛋济。三九已至,卻和暖如春炮叶,著一層夾襖步出監(jiān)牢的瞬間碗旅,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工镜悉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祟辟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓侣肄,卻偏偏與公主長(zhǎng)得像旧困,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子稼锅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容