在滚动历史记录时,如何阻止多行命令弄乱光标位置?

在滚动历史记录时,如何阻止多行命令弄乱光标位置?

有关的:为什么当我浏览历史记录时,我的 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 对实际列感到困惑。

相关内容