混合制表符和空格而不混合制表符和空格


Mixing tabs and spaces without mixing tabs and spaces

我是一个Vim用户(由于我的Python背景)已经习惯了空格而不是制表符。我正在和另一个使用Windows ide的开发人员一起开发一个PHP项目,他非常想使用选项卡。对于PHP来说,似乎没有什么硬性的、快速的样式指南,所以我需要处理制表符。

是否有某种方式,无论是通过Git或Vim,我可以使用选项卡代码并将其转换为空格,而我正在编辑它?然后也许在git添加/提交它可以转换回标签?

真正重要的是,跟踪的内容是标准化的。你和其他开发人员必须在某些方面达成一致。你们中的任何一个人想要做一些超出商定标准的事情,最终可能会有不同的结果。并不是每次都能清晰地来回转换。

我真的建议你处理它。我对制表符和空格有自己的看法,并且我曾经使用它们编写过代码。最好的做法是设置编辑器以匹配标准化的样式,然后使用它。在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的smudge/clean过滤器。您可以在man gitattributes或Pro Git中了解它们。您可以使用它们转换为编辑,然后返回到提交标准。如果没有任何奇怪的缩进,可以简单地将前导制表符更改为一定数量的空格,并将前导制表符更改为该数量的一小部分。使用sed/perl/indent,任何你觉得舒服的。