Zsh - コマンドのタブ幅を変更するにはどうすればいいですか

Zsh - コマンドのタブ幅を変更するにはどうすればいいですか

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有望そうな変数の影響を受けません。IFSman zshparam

>>もちろん、独自のバージョンを書いてタブにバインドすることもできますが、カーソルが移動したり、行が折り返されたり、行が複数になったり、さらにはvi キーが使われたりすると、この最後の手段はすぐに厄介なものになります。

答え1

ZLE は、プロンプト文字列および入力コマンド ライン内の TAB 文字をディスプレイ上のスペースに展開します。展開では、8 列ごとに固定のタブストップ計算を使用し、実際の TAB 文字を端末に送出せず、したがって端末の実際のタブストップ設定も送信しません。パラメータ化されたカーソル前方制御シーケンスがないことが terminfo/termcap データベースから通知された場合、カーソルの右方向移動のショートカットとして TAB を使用する場合も、同じ仮定が行われます。(

settermタブはラッキーでした。一般的に、 Linux KVT を駆動する Linux 組み込みの端末エミュレータ以外の端末エミュレータでは、util-linux を使用しないでください。https://unix.stackexchange.com/a/491883/5132Linux 組み込みターミナルエミュレータの制御シーケンスをハードコードしない、ポータブルな同等のものです。

答え2

stty -a端末の設定がハードウェアタブを使用するように設定されているかどうかを表示します(できるプログラムされているか(探してtab0出力に含まれます。

zshハードコードされている可能性があります。setterm確かにそうです(これ)。端末がハードウェアタブ用に設定されている場合は動作しますが、tabsプログラムはハードコードされていません (おそらくマシンにインストールされています)。

ここに画像の説明を入力してください

関連情報