是否可以仅用每个选项卡的一定数量的空格替换“前导选项卡”?我将前导制表符定义为仅以制表符或空格开头的制表符。我将前导或缩进选项卡定义为仅以空格开头的选项卡。
我的 . 中有以下一行.nexrc
,抄自这一行。它通过过滤器运行包含标记a
和标记的行之间的行。b
替换标签。
map \2 'a!'b pr -te2
但是,它很好地用两个空格替换了非前导制表符,这并不理想,因为有时需要文字制表符。
是否有一种简单且便携的方法可以仅用每个选项卡的一定数量的空格替换前导选项卡?
以下 perl 脚本(可以折叠为单行)使用命令行上提供的宽度替换前导制表符的工作,但它依赖于 Perl 的可用性并且需要二次时间(如果文件不包含任何内容但标签)。
#!/usr/bin/env perl
use strict;
use warnings;
my ($width) = @ARGV;
$width //= 2;
my $replacement = ' ' x $width;
while (<>) {
while (s/^(\s*)\t/$1$replacement/g) { }
print;
}
这是我想要发生的事情的一个例子。^I
指的是制表符字节,#
是行首的零宽度标记。下面的行是一个字节标尺。
前:
#^I^I ^Ia^Ib
# 1 23 45 67
之后(标签宽度为 2)
# a^Ib
#12345678 90
之后(标签宽度为 4)
# a^Ib
#12345678901234 56