混合标签和空间,无需混合标签和空格

时间:2011-12-04 18:50:33

标签: php git vim ide tab-size

我是一个Vim用户(由于我的Python背景)已经习惯了空格而不是标签。我正在与另一个使用Windows IDE并且真的想使用标签的开发人员合作开发一个PHP项目。对于喜欢特定风格的PHP来说,似乎没有任何硬性和快速的风格指南,所以我不得不处理标签。

有没有办法,通过Git或Vim,我可以使用选项卡代码并在编辑时将其转换为空格?那么也许在git add / commit上它可以转换回标签?

1 个答案:

答案 0 :(得分:3)

一个非常重要的事情是跟踪的内容是标准化的。你和其他开发者只需在那里达成一致意见。无论你想要做什么除了商定的标准之外,最终可能会得到不同的结果。它并不总是能够来回干净地转换。

我真的建议只处理它。我对标签和空格有自己的看法,而且我已经使用了每个代码。最好的办法就是设置你的编辑器以匹配标准化的风格,然后继续使用它。在vim中,关闭expandtab,将tabstop设置为您喜欢的内容。

如果您仍想尝试,有两种主要方式:

  • 在Vim中使用自动命令进行读/写转换。您可能需要BufReadPostBufWritePreBufWritePost。 (对于写作,你转换为标准,让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。