在捲動歷史記錄時,如何阻止多行命令弄亂遊標位置?

在捲動歷史記錄時,如何阻止多行命令弄亂遊標位置?

有關的:為什麼當我瀏覽歷史記錄時,我的 bash 提示符號會出現問題?

歷史看起來像:

 1831  git remote -v
 1832  gs 
 1833  gd 
 1834  gc -am 'moved apsum options etc to their own file
set routes to allow cors
changes to the apsum pull ' 
 1835  git push
 1836  reset
 1837  history
 1838  __git_ps1
 1839  reset
 1840  history
 1841  Kill 99894
 1842  history

g*都是 git 指令的別名。當我滾動歷史記錄時,一切都很好,直到我到達數字 1833(下劃線表示遊標位置):

$ gd _
[ up arrow]
$ gds_
[up arrow]
$ gdit remote -v_

我認為這是因為我的 PS1 中的非列印字符,但我已將所有這些字符括起來:

PS1="\n\[$FCYN\]\$(date +%H:%M:%S) \w\[$IGreen\]\$(__git_ps1)\[$Black\] $ \[$DarkGray\]"

我錯過了什麼?這只是當您有多行提交訊息時才會發生嗎?

編輯:我的最終解決方案太大,無法發表評論:

export PS1="\\n\[\033[38;5;246m\]\u@\[$(tput sgr0)\]\[\033[38;5;245m\]\h\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]\[\033[38;5;28m\]\w\[$(tput sgr0)\]\[\033[38;5;15m\]\[$(tput sgr0)\]\[\033[38;5;2m\]`__git_ps1`\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]\[\033[38;5;90m\]\t\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]\[\033[38;5;232m\]\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]\n\[$(tput sgr0)\]\[\033[38;5;0m\]\\$\[$(tput sgr0)\] "

這看起來很瘋狂,但它會產生一個很好的提示,其中包含 git 分支和顏色,這些提示在淺色背景上很容易閱讀(您在這裡看不到):

collumj@machineName ~ (dev) 17:35:42  
$ 

非常感謝http://bashrcgenerator.com/

答案1

「一切」都被括起來,但有幾個未知數。由於該列向右移動,這意味著某些東西正在發送 bash 沒有註意到的文字。

雖然區域設定不匹配可能會導致這種情況,但您可能會注意到

我會檢查並確保您的配置沒有使用__git_ps1.根據軟呢帽呼叫一個名為的腳本git-prompt.sh,反過來(如果你設定了GIT_PS1_SHOWCOLORHINTS)可以發送轉義序列,這可能會使 bash 對實際列感到困惑。

相關內容