
zsh とおそらく urxvt (?) の組み合わせと思われる奇妙な動作があります。私の設定は次のとおりです。デフォルトのシェルとしてurxvt -e 'tmux'
起動するターミナルを取得します。zsh
その後、カスタマイズを開始し$PROMPT
、現在は次のようになっています。
zstyle ':vcs_info:*' enable git svn hg bzr
zstyle ':vcs_info:*' formats $' \e[0;33m(%s:%b)\e[0m'
precmd () { vcs_info }
PROMPT+=$'\e[0;31m%n\e[0m'
PROMPT+="@"
PROMPT+=$'\e[0;34m%m\e[0m'
PROMPT+=":"
PROMPT+=$'\e[0;36m%3c\e[0m'
PROMPT+=$'\e[0;33m%c\e[0m'
PROMPT+='${vcs_info_msg_0_}'
export PROMPT
2%c
行目に気付いたかもしれませんが、これはもちろんテスト用です。
プロンプトの通常の動作は、Enter キーを押した後に新しい行を作成し、オプションで存在するコマンドを実行することです。新しい行が印刷されます。ただし、特定の状況下では異なる動作が発生することに気付きました。Enter キーを押すと、コマンドが実行され、出力が表示されます。しかし前のプロンプトが端末の先頭になかった場合、新しい出力全体が 1 行上に移動されるため、前の出力の最後の行が上書きされます。
例を挙げたほうがいいかもしれません。空のターミナルと新しいプロンプトから始めましょう。
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)
ここで、このディレクトリに入りますls -la
(サンプル出力):
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)
何かが欠けていることに注目してください。実際には、.git
ここにはディレクトリがあります。
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .git
ここで何が起こったかは簡単に説明できます。コマンド出力は正しく生成されますが、プロンプト行が 1 行上に移動し、出力の最後の行が上書きされます。同じことをもう一度実行すると、出力は次のようになります。
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)
ご覧のとおり、すべてがもう一度上に移動され、今回は..
前回の出力の と.git
今回の出力の が置き換えられました。
しかし、これはすべての設定で発生するわけではありません。ウィンドウが狭すぎる場合にのみ発生します。さらに、zsh が入った urxvt ウィンドウを開いた状態でサイズを変更してテストしました。狭すぎると、プロンプトがウィンドウ幅の約 3 分の 2 を占めると発生します。ただし、原因はわかりません。なぜこれはこの機会に起こります。
注意: - bash では発生しません (プロンプト自体が複数行の場合でも) -RPROMPT
空RPROMPT2
です - 表示される情報の種類に依存しないようです (つまり、無効にするvcs_info
と、プロンプトが再び十分に短くなる場合にのみ役立ちます) - プロンプトが複数行の場合 (2 行目が 3 分の 2 のマークに達していない場合) は発生しません - コンソール (tty) では発生しませんが、xterm では発生しますそしてurxvt。
まとめ: プロンプト行がウィンドウの約 3 分の 2 の長さの場合、zsh プロンプトは行が上に移動します。
答え1
bash カラー コードの代わりに使用することで修正できたようです%{fg[color]%}
(もちろん、そのためにはカラー モジュールをロードする必要があります)。