我承認我的 bash 提示符號是從幾個地方偷來的並拼湊在一起的,當使用向上/向下箭頭滾動 bash 歷史記錄時,有時會添加部分先前命令的長度。
例如,如果我之前的命令是:
ls
cd /home/caleb
vim .bashrc
當我按照提示向上滾動兩次時,它可能看起來像:
$ vim .bcd /home/caleb
其中前五個字元是上一個指令剩下的。
有誰知道為什麼會發生這種情況以及如何阻止這種情況?
我的提示是用以下程式碼設定的(太長了才能包含在此):https://gist.github.com/1679352
答案1
某個地方你的提示符是 fubar。通常發生的情況是,您的 shell 認為它正在輸出不可列印的術語代碼並期望它佔用空間。我能給您的最好建議是系統地添加(或刪除)您的提示,直到此行為停止以隔離導致此問題的程式碼。
答案2
顏色代碼需要用方括號括起來。括號告訴 bash 不應列印所包含的文本
以 @Pheditor 的範例為基礎,這表示在換行符之後完成的任何格式化都會導致原始問題:
export PS1="\n\n\[\033[01;33m[\w]\033[00m\n\033[0;90m\$ "
將格式程式碼包裝在 [] 中可確保永遠不會發生煩人的行為:
export PS1="\n\[\[\033[01;33m\][\w]\[\033[00m\]\n\[\033[0;90m\]\$ "
文件:http://tldp.org/HOWTO/Bash-Prompt-HOWTO/nonprintingchars.html
由於 PS1 格式導致值太長且難以閱讀,因此我將格式代碼放入變數中:
BYELLOW='\[\033[01;33m\]'
IBLACK='\[\033[0;90m\]'
PS_CLEAR='\[\033[0m\]'
export PS1="\n${BYELLOW}[\w]${PS_CLEAR}\n${IBLACK}\$ "
答案3
我遇到了同樣的問題,這與顏色定義有關。
就我而言,我有一個多行提示(為當前命令提供大部分空間,無論提示顯示的路徑長度如何)。
錯誤版本:
export PS1="\n\n\[\033[01;33m[\w]\n\033[00m\$ "
好版本:
export PS1="\n\n\[\033[01;33m[\w]\033[00m\n\$ "
\033[00m
終止顏色。如果它位於新行 ( \n
) 之後,則會阻止在終端機中正確重畫,從而用背景顏色覆蓋先前的命令。將其移到新線後面解決了問題。
(在 Mac OS 10.8 中使用終端)
答案4
我有這個問題。我檢測到什麼?
當 PS1 變數中有顏色時(例如: "\e[35m" ),它總是必須被 "\[" 和 "\]" 包圍(例如: "\[\e[35m\]" )。
當我按照這個規則在 PS1 中標記所有顏色時,它起作用了!
滾動 bash 歷史記錄不再有問題。
壞例子:PS1="\e[0;36m[\u@\h[\e[1;31m$ORACLESID\e[0;36m] \W]\e[0m";導出PS1
好例子:PS1="\[\e[0;36m\][\u@\h[\[\e[1;31m\]$ORACLESID\[\e[0;36m\]]\W]\[\e [0米\]”;導出PS1