これは、コマンドの出力で終端されていない行を明確に表示できるようにするための特定の機能ですzsh
(現在fish
も同様です)。
従来のシェルでは、コマンドが最後の改行文字の後にデータを出力する場合、つまり、端末カーソルを行の先頭に残さない場合、シェルによる次のプロンプトは最後の未終了行に追加されます次のように:
bash-4.4$ printf XXX
XXXbash-4.4$
それはプロンプトを破壊し、特にそのような手の込んだプロンプトXXX
を持っている場合、それを見逃すのは簡単です。また、カーソルの位置に影響を与えるため、カーソルを動かしたときに表示の不具合が発生します。
zsh
出力%
に太字で反転したビデオの文字を含む未終端の行があることを示すことにより、それを回避し、次の行の先頭に次のプロンプトを発行します。
zsh-5.1.1$ printf XXX
XXX%
zsh-5.1.1$
すべてのコマンド%
の最後(各プロンプトの前)にその反転ビデオを出力しますが、79スペース(80文字幅の端末を想定)、CR文字(カーソルを最初に戻すもの)が続きます列)および行の最後まで消去するシーケンス(およびプロンプト)。
このように、カーソルが最初の位置にないため、未終了の行があった場合、それらの80文字はカーソルを次の行に移動させます(そして、それ%
は残ります)。そうでない場合%
、その79個のスペースは1行になり、後で削除されます。
これは、端末が行を折り返す場合にのみ機能します(たとえば、後に正常に機能しませんtput rmam
)。遅い端末(9600ボーシリアルラインなど)がある場合は、実際%
に表示され、各コマンドの後に削除されるので、zsh
その機能を無効にできます。
unsetopt prompt_cr prompt_sp
そのように、zsh
従来のシェルのように動作します。
$PROMPT_EOL_MARK
変数でそのマークを変更することもできます。
print -n "this is a test"
その後print "this is a test"