Zsh:インタラクティブモードで複数行ステートメントを作成するときにブロックプレフィックスを削除する方法は?

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でこれを無効にする方法はありますか?

- 編集する -

ある日、検索エンジンを介してこの問題に直面した人のための$PS2Zshのデフォルトはです。PS2=%_>~から文書:

%_

パーサーの状態、つまりコマンドラインから始まるシェル構成(例: "if"や "for")。整数が与えられると、多くの文字列が印刷されます。ゼロまたは負の数または整数がない場合は、できるだけ多くの値を印刷することを意味します。これは、連続行のためにPS2をプロンプトし、XTRACEオプションを使用してデバッグのためにPS4をプロンプトするときに最も便利です。後者の場合、非対話式でも機能します。

承認された回答に基づいて、私は次のPS2設定を完了しました。各ブロックに2つのインデントを追加し、PS1の長さに合わせて最初の2つのスペースを占めます。

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

答え1

PS2これは、すべてのBourneスタイルシェル(zshを含む)の変数で構成された2番目のプロンプトです。zshから、デフォルトでは、どのシェル構造(ループ、引用符など)が開いているかを示します。%_ 早く脱出バッシュから、デフォルトは>エスケープシーケンスを使用できますしかし、それほど有用ではありません。

ヘルパープロンプトが必要ない場合は、空白のままにしてください。

PS2=

このprompt_substオプションを有効にすると、各入れ子レベルにスペースを入れることができ、視覚的なフィードバックを提供しますが、端末からコードをコピーできます。

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

関連情報