【问题标题】:Can perltidy remove all leading whitespaces before performing indent rules?perltidy 可以在执行缩进规则之前删除所有前导空格吗?
【发布时间】:2021-10-11 23:09:57
【问题描述】:

假设我有一些看起来像这样的 Perl 代码

      use Data::Dump q[pp];
  sub something{
      return 2 + 2;
  }

我希望它被 perltidy 格式化为

use Data::Dump q[pp];
sub something{
    return 2 + 2;
}   

也就是说,所有前导空格都被消除了,所有行都左对齐,但随后应用了缩进规则。我试过-dws 但这没有用,其他选项似乎都没有做任何事情。这可能吗?

【问题讨论】:

  • 总是可以将前导空格作为一个单独的步骤去除...perl -pe 's/^\s+//' foo.pl | perltidy > foo_pretty.pl
  • 但这就是我得到的 perltidy 输出(除了use 和子例程之间的空行)...
  • @Shawn 并且您的输入在所有行前都有前导空格?如果是这样,您使用的是什么perltidy 设置?
  • 这里也一样,如果 all 行有一些缩进,那么perltidy 不会触及它。但它做它的事,除此之外;我认为它没有理由触及整体缩进。我跳过了它的手册页,并没有找到任何选项。但是,如果任何一行的缩进为 0(如 shebang 行),那么它确实会调整整体缩进。所以......也许只是添加一(1)行?比如评论、时间戳等等。
  • 不,除了缩进的 sub 主体之外没有前导空格。根本没有选择,或者只是-dws。 (不过,我复制并粘贴到的模板 perl 文件确实有一个 shebang。)

标签: perl perl-tidy


【解决方案1】:

如图所示,这是不可能的。

一些额外的实验表明,只要在文件开头至少有一行(可以包含几乎任何内容)缩进少于四个空格,perltidy 就会像原始问题中所希望的那样缩进。

这种特定示例的解决方案是在 Makefile 中包含预处理步骤,该步骤在运行 perltidy 之前简单地消除所有空白行和剩余空间。这样就解决了问题。

sed -i -e 's/^[ \t]*//' file.pl
sed -i -e '/./!d' file.pl
perltidy file.pl

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    相关资源
    最近更新 更多