Bash
終端提示覆蓋目前行
我的終端提示行有問題。當行太長時,它會纏繞在同一行上,然後
Up arrow
使它看起來更糟。我已經檢查了終端提示未正確換行,但看起來我顯然正在關閉所有方括號以顯示不可列印的字元。
這是我的 PS1:
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot) }\[\033[01;36m\]\u@\h\[\033[00m\]\033[01;34m\]\w\033[00m\][$(type __git_ps1 >/dev/null 2>&1 && __git_ps1 "(%s)")]
將此視為我的標準提示行
MELISC@work~/dev/bin_tools[((main))]
我能夠得到
assdasdasdasdasdadasdsadadasdaddasdadadasdadsadasdsa((main))] asdsadsadsadsadasdasdassdasdasdassdasdassdasdasdasdasdasdasdsadsad
我已經檢查過我的
.bashrc
我有並且
shopt -s checkwinsize
應該自動檢查列
您已經完全否定了 Bourne Again shell 的想法,即在顯示命令歷史記錄並允許您編輯命令行時,已列印的內容以及必須擦除/重寫的內容。
將提示分解為多個部分:
\[\e]0;\u@\h: \w\a\]
— 非列印字元,正確封閉${debian_chroot:+($debian_chroot) }
——大概只列印字元\[\033[01;36m\]
— 非列印字元,正確封閉\u@\h
— 僅列印字元\[\033[00m\]
— 非列印字元,正確封閉\033[01;34m\]
— 非列印字元,未正確封裝,因此 Bourne Again shell 不知道它們是\w\033[00m\]
— 列印字元和非列印字元的錯誤混合[$(type __git_ps1 >/dev/null 2>&1 && __git_ps1 "(%s)")]
——大概只列印字元我之前已經給出過這個建議,但它也是適用於這裡的一般建議:
- 為了您自己的理智,使用
\e
或始終使用。\033
- 使您的
\[
和\]
嚴格匹配的非嵌套對。- 確保所有非列印序列都在
\[
和內\]
(相反,所有列印序列都不在)。(這就是為什麼當我想要古怪的彩色提示時,我個人更喜歡 Z Shell 及其替代的提示擴展機制。它知道諸如此類
%F{green}
的東西不是列印序列,無需被告知;它還可以計算出正確的轉義序列來自terminfo
,沒有硬連線。)