Zsh - 如何更改命令的制表符宽度

Zsh - 如何更改命令的制表符宽度

如何在 ZSH 中的单行和多行命令中更改制表符的宽度以进行缩进?这与文字制表符不同;当您按下 Tab 键时,ZSH 实际上会向终端发出空格:

zsh -f # Run without config
blackcap% echo $'\t.'
        .
blackcap%       .
blackcap% if
if>     .
blackcap% tabs 4
blackcap% echo $'\t.'
    .
blackcap%       .
blackcap% if
if>     .

此行为不受我的终端仿真器 中的设置的影响,也不受中提到的setterm --regtabs听起来有希望的变量的影响。IFSman zshparam

显然,我可以编写自己的版本并将其绑定到选项卡,但是当光标移动、换行、有不止一行时,这个最后的手段很快就会变得毛茸茸的——更不用说还有>>使用 vi 键的朋友了。

答案1

ZLE 将提示字符串中的制表符和输入命令行扩展为显示的空格。扩展使用每 8 列固定计算制表位,并且不涉及向终端发出实际的 TAB 字符以及终端的实际制表位设置。当它使用 TAB 作为向右光标移动的快捷方式时,当 terminfo/termcap 数据库告知它没有参数化的光标向前控制序列时,它会做出相同的假设。 (例子,例子,例子

你很幸运有标签。一般来说,setterm除了驱动 Linux KVT 的内置 Linux 终端仿真器之外,不要在任何终端仿真器中使用 util-linux 。看https://unix.stackexchange.com/a/491883/5132用于不硬编码 Linux 内置终端仿真器的控制序列的便携式工作类似程序。

答案2

stty -a会显示终端的设置是否使用硬件选项卡(其中被编程)或不(寻找tab0在输出中)。

zsh可能是硬编码的;setterm当然是(参见)。如果您的终端设置了硬件选项卡,那么它就会起作用。但是tabs程序不是硬编码的(并且可能安装在您的计算机上)。

在此输入图像描述

相关内容