Command-Line
Zsh:如何在互動模式下編寫多行語句時刪除塊前綴?
當我在 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 中禁用這些?- 編輯 -
原來
$PS2
Zsh 中的預設值是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='${${(%):-%_}//[^ ]} '