Command-Line

Zsh:如何在互動模式下編寫多行語句時刪除塊前綴?

  • January 9, 2022

當我在 Zsh 中以互動模式編寫多行語句時,它會在我的語句前面加上我所在的塊類型,如下所示:

% for i in $(seq 3); do
for> echo $i
for> done
1
2
3
% function foo() {
function> echo bar
function> }
% foo
bar

我不想看到for>function>其他程式碼塊前綴。我什至不確定呼叫這些前綴來充分搜尋如何抑制它們。Bash 也僅使用>角色來執行此操作,但我沒有運氣從那條路線中弄清楚它。有沒有辦法在 Zsh 中禁用這些?

- 編輯 -

原來$PS2Zsh 中的預設值是PS2=%_>,對於有一天通過搜尋引擎遇到這個的任何人。從文件

%_

解析器的狀態,即在命令行上啟動的shell 結構(如’if’ 和’for’)。如果給定一個整數,將列印許多字元串;零或負數或沒有整數意味著列印盡可能多的數量。這在提示 PS2 繼續行和 PS4 使用 XTRACE 選項進行調試時最有用;在後一種情況下,它也將以非互動方式工作。

根據接受的答案,我最終得到了這樣的 PS2 集,它為每個塊添加了 2 個空格縮進,並佔了最初的 2 個空格以與我的 PS1 長度對齊:

PS2='${${${(%):-%_}//[^ ]}// /  }    '

PS2這是在包括 zsh 在內的所有 Bourne 樣式 shell 中通過變數配置的輔助提示。在 zsh中,它預設顯示哪些 shell 構造(循環、引號等)是打開的,使用%_ 提示符 escape在 bash中,它預設為> 並且您可以使用轉義序列,但它們不是很有用。

如果您不想要任何輔助提示,請將其設為空:

PS2=

啟用該prompt_subst選項後,您可以使其每層嵌套有一個空格,這會提供一些視覺回饋,但可以從終端複製程式碼。

setopt prompt_subst
PS2='${${(%):-%_}//[^ ]} '

引用自:https://unix.stackexchange.com/questions/685666