zshプロンプトが正しくエスケープされていません。

zshプロンプトが正しくエスケープされていません。

これは現在のプロンプト定義です。

PROMPT='%(?..%F{赤}%?%f:)%F{青}%n%f:%F{緑}%{${PWD/#$HOME/~}%} % ( !.%F{赤}.%f)%# %f'

検索履歴を使用するときなど、実際のプロンプトの後にカーソルが1文字始まる場合がありますctrlR

ベストアンサー1

作業ディレクトリを印刷するプロンプト部分とその周辺を削除する必要があります%{%}

PROMPT='%(?..%F{red}%?%f:)%F{blue}%n%f:%F{green}${PWD/#$HOME/~} %(!.%F{red}.%f)%# %f'

%{シーケンスは、%}カーソル位置に影響を与えないヒントビットの周りに配置されます(たとえば、ハードコーディングされた制御シーケンス)。実際にカーソルの移動を囲むと(現在の作業ディレクトリを印刷して)混乱します。扱いにくいカーソルがどこにあるかという概念です。現在の行の一部を再描画する必要がある場合(たとえば、Crで検索するとき)、カーソルが間違った位置に配置されます。

印刷された表現をより長い目次に変更することでこれを確認できます。を使用すると、カーソルはcd /tmp1列(長さ/tmp)ではなく4列(長さ~)だけオフセットされます。


または、通常、現在の作業ディレクトリを含める%~代わりに使用できます。${PWD/#$HOME/~}したがって、これが唯一の交換であれば、電源を切ることができますPROMPT_SUBST

また、の場合、${PWD/#$HOME/~}または制御文字が含まれていると問題が発生します。可能であれば、コンテンツに制御されていないデータを含めないことをお勧めします。これを回避できない場合は、プロンプト文字列として意味があるようにいくつかのエスケープを実行する必要があります。$PWD%$PROMPT

おすすめ記事