如何知道终端当前的制表符宽度?

如何知道终端当前的制表符宽度?

我知道选项卡命令可用于设置终端的制表符宽度,但如何知道终端当前的制表符宽度(假设制表符等距)?我在中找不到相关信息选项卡手册,我错过了什么吗?

答案1

人们可以使用tab-width.sh这样的脚本:

#!/usr/bin/env bash

echo -ne 'a\tb'  &&
    echo -ne "\033[6n"            # ask the terminal for the position
read -rs -d\[ _                   # discard the first part of the response
read -rs -dR foo                  # store the position in bash variable 'foo'
foo=$(cut -d";" -f2 <<< "$foo")   # discard row number
printf "\r\e[0K%d\n" $((foo - 2)) # subtract 2 for 'a' and 'b'

改编自StackOverflow 上的这个答案。例子:

$ tabs 10

$ ./tab-width.sh
10
$ tabs 20

$ ./tab-width.sh
20
$ tabs 3

$ ./tab-width.sh
3

请谨慎使用,该脚本尚未经过彻底测试。尽管 1 和 2 返回相同的值,但它在大多数情况下似乎运行良好:

$ tabs 1

$ ./tab-width.sh
2
$ tabs 2

$ ./tab-width.sh
2

但应该注意到,echo -e 'a\tb'在这两种情况下,返回的输出也是相同的。

答案2

编辑:以下内容实际上并不像我想象的那样工作。感谢@4wk_ 在评论中指出这一点:)


我一直在使用

echo $'\t' | wc -L

# typical output:
8

以此目的。

  • echo $'\t'= 打印单个制表符
  • wc=“字计数器”程序
  • -L=又名--max-line-length;告诉wc计算线路长度的开关,选项卡正确展开

我发现这种方法在不同的 TTY 和 shell 之间非常可移植。为了提高可移植性,我唯一要添加的就是将 echo 更改为:

echo -e "\t"

但确实是番茄番茄。

相关内容