PS1の上に前に追加した後、残りの改行文字を追加します。

PS1の上に前に追加した後、残りの改行文字を追加します。

OBSD kshにはPS1の前に空行があります。

PS1="\n[\u@\h] \w\n\$"

問題は、仮想環境を有効にすると、pyenvが仮想環境名の前にその名前を追加することです。 pyenvアクティベーションスクリプトの関連部分は次のとおりです。

PS1="(porcupine) ${PS1:-}"

これは空の行を食べて回転します。

[myusername@myhostname] ~/some/path $ echo foo
foo

[myusername@myhostname] ~/some/path $

入力する

(virtual-environment-name)
[myusername@myhostname] ~/some/path $ echo foo
foo
(virtual-environment-name)
[myusername@myhostname] ~/some/path $

これは迷惑でtputで修正しようとしました:

PS1_TEXT="[\u@\h] \w\n\$ "
PS1="$(tput sc il1 nw)$(tput rc DO 1)\n$PS1_TEXT"

これにより、カーソルが仮想環境名の上の行に移動して空白行になり、元のPS1に戻ります。

ほとんど動作しますが、ターミナルウィンドウの下部をクリックすると仮想環境名が消えます。これもまた迷惑ですね。

ベストアンサー1

正しいpyenvソースを確認したと仮定すると、pyenvの干渉なしにカスタムをPYENV_VIRTUALENV_DISABLE_PROMPT=1設定して構築することをお勧めします。PS1

有効な環境が利用可能である必要がありますPYENV_VIRTUAL_ENV(または起動後に設定された内容を確認するために使用したものenv)。

https://github.com/pyenv/pyenv-virtualenv/blob/c85c1c9ed520d28cbb34e10e1fe82c6ee37130bc/bin/pyenv-sh-activate#L244

かなり面白いです。この変数に関する多くの質問/議論と修正を提案する「サポートの中止」を見つけることができます。例えばhttps://stackoverflow.com/questions/74611317/enable-pyenv-virtualenv-prompt-at-terminal

このサポートの中断は最近削除され、pyenvはすぐに修正を維持する予定です(このように無効にすることを含む)。バラよりhttps://github.com/pyenv/pyenv-virtualenv/commit/77a7644ff7a7a624ba4dfebe5c7441a57be3cc48

PS:$()kshでもbashと同じように動作すると仮定すると、出力のtput代わりにasコマンドを追加すると、シェルのパフォーマンスに不必要な影響を与える可能性があります。

おすすめ記事