【问题标题】:Converting entire source code from tabs to 4 spaces将整个源代码从制表符转换为 4 个空格
【发布时间】:2013-01-30 13:33:07
【问题描述】:

在将 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) 一样简单吗?

【问题讨论】:

  • 四个空格是标准,因为它在 IDE 中显示相同 - 我真的很惊讶 GitHub 不会遵循该标准。许多 IDE 具有自动格式化功能,可以为您完成此操作。
  • 对你的正则表达式是,但如果你使用像 Netbeans 这样的 IDE,这些操作应该被内置并自动将制表符扩展到空格(如果设置为这样做的话)。请记住,尽管选项卡会根据作者偏好进行缩放,而空格则不会。
  • @crush 我认为这是 Cake 而不是 GitHub,源文件有制表符而不是 2.3.0 之前的以前版本中的空格(我认为)。
  • @JamesDawson - AFAIK 肯定是小菜一碟,我所有的项目都在代表和在线代码浏览器中保留制表符缩进。
  • @JamesDawson CakePHP 一直使用制表符进行缩进,而不仅仅是从 2.3 开始

标签: php cakephp


【解决方案1】:

在你希望执行的目录中试试这个:

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

这应该将制表符替换为 4 个空格(如果您将 X 替换为空格)。

调整t//g 之间的空格,你想要多少空格都可以……只要去掉X 并在里面放空格。

【讨论】:

    【解决方案2】:

    当制表符跟随占用该制表符区域的空格字符时,直接用空格替换制表符会导致不对齐。

    使用 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()
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 我确实有 Sublime Text 2 并且知道此功能,但我必须为我处理的每个文件都这样做,我想浏览每个现有文件并将其更改为空格一次以节省我一遍又一遍地做的事情。
      猜你喜欢
      • 2011-08-10
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2013-12-12
      相关资源
      最近更新 更多