エスケープ文字はどこに配置する必要がありますか? [コピー]

エスケープ文字はどこに配置する必要がありますか? [コピー]

.bashrcを編集してプロンプトを変更してみました。

export PS1="\e[0;32m[\u@\h \W]\$ \e[m"

これはうまくいきますが、逆方向履歴にアクセスするためにctrl-rを使用すると、最終的に私の入力が解釈されるのと同じ場所に表示されなくなります(例:この問題)。しかし、上矢印または下矢印を使用して前のコマンドを選択するのは問題ありません。

この質問を見ましたが、プロンプトでエスケープ文字をどこに適用するのかわからないようです。いくつかの組み合わせを試しましたが、プレーンテキスト入力機能や簡単な戻る/前方の記録が壊れています。

どの文字インスタンスをエスケープする必要があるのか​​、その理由を説明できれば、私(そして他の人も)が学ぶのに役立ちます。

答え1

シェルは、プロンプトが画面上でどのくらいのスペースを占めるかを知る必要があります。画面スペースを占有しない文字シーケンスは、\[andでエスケープする必要があります\]。これには、カラー設定、ターミナルウィンドウにタイトルを付け、カーソルを移動するために使用されるエスケープシーケンスが含まれます。

あなたの場合は次のとおりです。

export PS1="\[\e[0;32m\][\u@\h \W]\$ \[\e[m\]"

シェルが[\u@\h \W]$実際に画面スペースだけを占めるように指示します。

関連情報