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程式不是硬編碼的(並且可能安裝在您的電腦上)。

在此輸入影像描述

相關內容