2011-12-04 114 views
1

我是一個Vim用戶(由於我的Python背景)已經習慣於空間而不是製表符。我正在與另一位使用Windows IDE的開發人員合作開發一個PHP項目,並且非常想使用製表符。對於喜歡特定風格的PHP,似乎沒有任何硬性和快速的風格指南,所以我有點不滿。混合製表符和空格而不混合製表符和空格

是否有某種方式,無論是通過Git還是Vim,我可以使用選項卡式代碼並在編輯時將其轉換爲空格?那麼也許在git上添加/提交它可以轉換回製表符?

回答

3

其中一件非常重要的事情是跟蹤的內容要標準化。你和其他開發者只需要就那裏的事情達成一致。無論你想要做什麼,除了達成一致的標準之外,最終結果可能不一樣。來回轉換並不總是可能的。

我真的會推薦處理它。我對標籤和空格有我自己的看法,並且我已經使用每個代碼進行了代碼研究。要做的最好的事情就是設置你的編輯器來匹配標準化的風格,並與之配合。在vim中,關閉expandtab,將tabstop設置爲你喜歡的。

如果你仍然想嘗試,有兩種主要方式:在Vim中

  • 使用自動命令的讀/寫轉換。您可能需要BufReadPost,BufWritePreBufWritePost。 (對於編寫,您轉換爲標準,讓Vim編寫它,然後轉換回您想要編輯的方式。)確保tabstop設置爲您喜歡的方式,然後如下所示(未測試):

    set tabstop=4 
    autocmd BufReadPost * set expandtab | retab 
    autocmd BufWritePre * set noexpandtab | retab! 
    autocmd BufWritePost * set expandtab | retab 
    

*是這將適用於的文件模式;您可能不得不惹禍,或者只爲特定目錄中的文件添加自動命令,以確保這不會發生在您編輯的所有內容上。請注意,這是危險的;它將例如替換字符串中的字面標籤字符。

  • 使用Git的塗抹/清潔過濾器。您可以在man gitattributesPro Git中閱讀。你可以使用這些轉換進行編輯,然後回到提交標準。如果沒有任何奇怪的縮進,它可能就像將引導標籤更改爲一定數量的空格,以及將空格縮小爲該標籤數量的一小部分一樣簡單。無論你喜歡什麼,都可以用sed/perl/indent來做。
+0

Jefromi,請您詳細說明這部分是做什麼的。 「set expandtab | retab autocmd BufWritePre * set noexpandtab | retab!autocmd BufWritePost * set expandtab | retab」 – kshenoy

+0

@ Ronin420:我的格式不好;現在清楚了嗎?根據需要查找單個命令,例如':help autocmd'。 – Cascabel