我正在打开一个文件(在 perl 中),我想知道如何确定制表符的外观。
我知道它们在我的文件中,但我想知道如何分辨它是什么。我知道要输出到文件,你会使用 \t,但它对于读取文件并不相同。
我也知道它会将其读取为某种 TAB 字符,因为我在每一行上逐个字符地打印出一行,并且可以很容易地看到 TABed 行。
制表符始终\t
是 ,没有什么可说的了。
但是,一些编辑器使用关于单个制表符应该代表多少个空格的约定。常识说 8,但通常人们的意思是 4,我见过它表示 3 甚至 2 个空格。
一些编辑器(如 Komodo 或 Komodo Edit)试图变得聪明:他们读取源文件并计算前导空格和制表符的典型分布。例如,如果只能看到 4,8,12,... 前导空格,则可能隐含地假设您的制表符应该表示 4 个空格。或者,如果观察到 2,4,6,... 前导空格,则每个制表符可能使用 2 个空格。
如果我对您的理解正确,您希望前导空格具有类似的行为。
在这种情况下,您可以使用下面的代码确定最有可能的制表符空格值。请注意,此代码不是最佳的:它会忽略带有实际制表符的行,它只考虑第一个缩进级别来获得制表符缩进等等。仅将此视为获得良好实施的起点:
my %dist;
while (my $line = <>) {
my ($spaces) = ($line =~ /(^ *)/);
my $len = length($spaces);
$dist{$len}++;
}
my @sp = sort {$a <=> $b} keys %dist;
print "Leading space distribution in file: "
. join(",", @sp) . "\n";
if (scalar @sp >= 2) {
print "Most likely tab setting is: ", $sp[1] - $sp[0];
}
如果您按下制表键,某些 IDE 和编辑器通常会插入四个空格而不是制表符。实际的制表符在 perl 中是 \t (内容取决于平台,但 \t 应始终代表您平台的制表符)
为确保您同时捕获制表符和任何 4 个空格组,您可以使用正则表达式/\t| {4}/