1

在将 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)在每个文件上做 a 一样简单吗?

4

3 回答 3

2

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

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

那应该用 4 个空格替换制表符(如果用空格替换 X)。

调整你想要多少空间之间的t/空间/g……只需去掉 X 并在其中放置空间。

于 2013-01-30T13:54:16.303 回答
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()
于 2013-02-27T08:12:18.440 回答
0

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

如何在 Sublime Text 2 中用制表符替换四个空格?

于 2013-01-30T13:40:31.310 回答