如何在 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
听起来有希望的变量的影响。IFS
man zshparam
显然,我可以编写自己的版本并将其绑定到选项卡,但是当光标移动、换行、有不止一行时,这个最后的手段很快就会变得毛茸茸的——更不用说还有>>
使用 vi 键的朋友了。
答案1
ZLE 将提示字符串中的制表符和输入命令行扩展为显示的空格。扩展使用每 8 列固定计算制表位,并且不涉及向终端发出实际的 TAB 字符以及终端的实际制表位设置。当它使用 TAB 作为向右光标移动的快捷方式时,当 terminfo/termcap 数据库告知它没有参数化的光标向前控制序列时,它会做出相同的假设。 (例子,例子,例子)
你很幸运有标签。一般来说,setterm
除了驱动 Linux KVT 的内置 Linux 终端仿真器之外,不要在任何终端仿真器中使用 util-linux 。看https://unix.stackexchange.com/a/491883/5132用于不硬编码 Linux 内置终端仿真器的控制序列的便携式工作类似程序。