将整个源代码从制表符转换为4个空格

时间:2013-01-30 13:33:08

标签: php cakephp

我刚刚意识到将CakePHP源提交给GitHub之后,他们现在使用制表符来缩进代码而不是四个空格。他们还在.editorconfig文件中对此进行了定义,我已将其更改为:

root = true

[*]
indent_style = space
indent_size = 4
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

有没有办法运行整个源代码并安全地将所有选项卡转换为四个空格以进行缩进?我的理由是repo上的每个开发人员使用四个空格,混合和匹配将导致代码在GitHub上查看时看起来不合适。而我只是一致的粉丝:)。

如果我要按照家酿方式编写自己的脚本,我真的不介意用什么语言,虽然我对PHP更有信心(不是最适合这份工作,我知道) 。这就像在每个文件上执行preg_replace('~\t~', ' ', $fileText)一样简单吗?

3 个答案:

答案 0 :(得分:2)

在您希望执行的目录中尝试此操作:

find ./ -type f -exec sed -i 's/\t/XXXX/g' {} \;

那应该用4个空格替换标签(如果你用空格替换X)。

调整t//g之间的空间,无论你想要多少空格......只需摆脱X并在其中放置空格。

答案 1 :(得分:1)

直接替换带有空格的制表符会导致制表符错误对齐空格字符会侵占该标签区域。

使用expandtabs()字符串方法的基本python脚本将导致代码看起来与构思时相同。示例是选项卡空间为4:

#!/usr/bin/python
#
# convert source code or text with spaces, being careful to align text as it was conceived
# with the original tab space settings, which is defaulted to 4 spaces per tab.
#
# usage:
# ./tabs2spaces.py <file_to_convert>

import os
import sys

spaces_per_tab = 4

argc = len( sys.argv )

if argc < 2:
    print 'no file argument specified'

filename = sys.argv[ 1 ]
old_filename = 'old_' + filename

os.rename( filename, old_filename )

fn = open( filename, 'wb' )
fo = open( old_filename, 'r' )

for line in fo:
    fn.write( line.expandtabs( spaces_per_tab ) )

fn.close()
fo.close()

答案 2 :(得分:0)

不确定您是否有权访问或已使用Sublime Text 2,但它可以自动将所有标签转换为空格:

How to replace four spaces with a tab in Sublime Text 2?