當視窗太窄時,為什麼我的 zsh 提示符號會向上移動?

當視窗太窄時,為什麼我的 zsh 提示符號會向上移動?

urxvt -e 'tmux'我有一個奇怪的行為,似乎是 zsh 和 urxvt (?)的組合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

您可能會注意到第二%c行,當然,用於測試。

提示的正常行為是在按 Enter 鍵後建立新行,並可選擇執行可能存在的命令。列印出一行新行。但是,我注意到在某些情況下會出現不同的行為:當我按 Enter 時,將執行命令並顯示輸出。然而,當先前的提示符不在終端頂部時,先前輸出的最後一行將被覆蓋,因為整個新輸出向上移動一行。

也許有一個例子是適當的。從空白終端機和新提示符號開始:

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

這裡發生的情況很容易描述:命令輸出正確生成,但提示行向上移動一行並覆蓋輸出的最後一行。因此,如果我再次執行相同操作,我的輸出將如下所示:

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此輸出中的 。

但並非所有設定都會發生這種情況。只有當視窗太窄時才會發生這種情況。此外,我還透過調整開啟的 urxvt 視窗(其中包含 zsh)的大小來測試這一點。當我把它弄得太窄時。據我所知,一旦提示佔據了視窗寬度的三分之二,它就會開始。然而我不知道為什麼就在這時候發生這種情況。

一些注意事項: - bash 不會發生這種情況(即使提示本身是多行) -RPROMPT並且RPROMPT2是空的 - 它似乎不依賴於顯示的信息類型(即,vcs_info只有當提示再次變得足夠短時,禁用才有幫助) -當提示符號是多行時(並且第二行未達到三分之二標記),它不會發生 - 它不會在控制台(tty)中發生,但在 xterm 中會發生urxvt。

概括:如果提示行大約是視窗的三分之二長,我的 zsh 提示符號會在行向上時移動。

答案1

我似乎已經通過使用%{fg[color]%}而不是 bash 顏色代碼來修復它(當然,我需要加載顏色模組)。

相關內容