
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 顏色代碼來修復它(當然,我需要加載顏色模組)。