gpt4 book ai didi

whitespace - 如何清理代码库、尾随空格、新行等

转载 作者:行者123 更新时间:2023-12-04 12:13:49 26 4
gpt4 key购买 nike

我有一个代码库,由于尾随空格而使我发疯。我想把它清理干净。

我想:

  • 删除所有尾随空格
  • 删除文件末尾的所有换行符
  • 将所有行尾转换为 unix (dos2unix)
  • 将所有前导空格转换为制表符,即将 4 个空格转换为制表符。
  • 忽略 .git 目录。

  • 我在 OSX 雪豹 ,并在 zsh .

    到目前为止,我有:
    sed -i "" 's/[ \t]*$//' **/*(.)

    这很好用,但是 sed 在它触及的每个文件的末尾添加了一个新行,这不好。我不认为 sed 可以停止这样做,那么我该如何删除这些新行?这里可能需要应用一些 awk 魔法。

    (也欢迎完整答案)

    最佳答案

    [编辑:固定空白修剪]
    [编辑 #2:从文件末尾去除尾随空行]

    perl -i.bak -pe 'if (defined $x && /\S/) { print $x; $x = ""; } $x .= "\n" x chomp; s/\s*?$//; 1 while s/^(\t*)    /$1\t/; if (eof) { print "\n"; $x = ""; }' **/*(.)

    这会从文件中去除尾随的空白行,但 只剩下一个 \n 在文件的末尾。大多数工具都期望这一点,并且它不会在大多数编辑器中显示为空行。但是,如果您确实想删除最后一个 \n , 只需删除 print "\n";部分来自命令。

    该命令通过“保存”来工作 \n字符,直到看到包含非空白字符的行 - 然后在处理该行之前将它们全部打印出来。

    删除 .bak避免创建原始文件的备份(使用风险自负!)
    \s*?非贪婪匹配零个或多个空白字符,包括 \r ,这是 \r\n 的第一个字符DOS 换行语法。在 Perl 中, $匹配行尾或紧接在最后 \n 之前,因此结合 *? 的事实非贪婪匹配(首先尝试 0 宽度匹配,然后尝试 1 宽度匹配等等)它做正确的事情。
    1 while s/^(\t*) /$1\t/只是一个循环,它重复替换以任意数量的制表符开头的任何行,后跟 4 个空格,并且比以前多一个制表符,直到不再可能。因此,即使某些行已经部分转换为制表符,它也会起作用,前提是所有 \t字符从可被 4 整除的列开始。

    我还没看过 **/*(.)之前的语法,大概是 zsh延期?如果它与 sed 一起使用,它将与 perl 一起使用.

    关于whitespace - 如何清理代码库、尾随空格、新行等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5011630/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com