
ZSH の単一行および複数行のコマンドで、インデント用のタブの幅を変更するにはどうすればよいですか? これはリテラルタブと同じではありません。タブキーを押すと、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 は、プロンプト文字列および入力コマンド ライン内の TAB 文字をディスプレイ上のスペースに展開します。展開では、8 列ごとに固定のタブストップ計算を使用し、実際の TAB 文字を端末に送出せず、したがって端末の実際のタブストップ設定も送信しません。パラメータ化されたカーソル前方制御シーケンスがないことが terminfo/termcap データベースから通知された場合、カーソルの右方向移動のショートカットとして TAB を使用する場合も、同じ仮定が行われます。(例、例、例)
setterm
タブはラッキーでした。一般的に、 Linux KVT を駆動する Linux 組み込みの端末エミュレータ以外の端末エミュレータでは、util-linux を使用しないでください。https://unix.stackexchange.com/a/491883/5132Linux 組み込みターミナルエミュレータの制御シーケンスをハードコードしない、ポータブルな同等のものです。