我承认我的 bash 提示符是从几个地方偷来的并拼凑在一起的,在使用向上/向下箭头滚动 bash 历史记录时,有时会在其长度中添加部分先前的命令。
例如,如果我之前的命令是:
ls
cd /home/caleb
vim .bashrc
Run Code Online (Sandbox Code Playgroud)
当我在提示下向上滚动两次时,它可能看起来像:
$ vim .bcd /home/caleb
前五个字符是最后一个命令留下的。
有谁知道为什么会发生这种情况,以及如何阻止?
我的提示是用这个代码设置的(在这里包含的方式很长):https : //gist.github.com/1679352
小智 48
颜色代码需要用方括号括起来。括号通知 bash 不应打印所包含的文本
以@Phreditor 的示例为基础,这表明在换行符之后进行的任何格式化都将导致原始问题:
export PS1="\n\n\[\033[01;33m[\w]\033[00m\n\033[0;90m\$ "
Run Code Online (Sandbox Code Playgroud)
将格式代码包装在 [] 中可确保不会发生烦人的行为:
export PS1="\n\[\[\033[01;33m\][\w]\[\033[00m\]\n\[\033[0;90m\]\$ "
Run Code Online (Sandbox Code Playgroud)
文档: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}\$ "
Run Code Online (Sandbox Code Playgroud)
小智 8
我有同样的问题,它与颜色定义有关。
就我而言,我有一个多行提示(无论提示显示的路径长度如何,都为当前命令提供最多空间)。
错误版本:
export PS1="\n\n\[\033[01;33m[\w]\n\033[00m\$ "
Run Code Online (Sandbox Code Playgroud)
好版本:
export PS1="\n\n\[\033[01;33m[\w]\033[00m\n\$ "
Run Code Online (Sandbox Code Playgroud)
\033[00m终止颜色。如果它在新行 ( \n) 之后,它会阻止在终端中正确重绘,用背景颜色覆盖以前的命令。将它移到新线后面解决了这个问题。
(在 Mac OS 10.8 中使用终端)
某处你的提示是 fubar。通常发生的情况是你的 shell 认为它输出了不可打印的术语代码并期望它占用空间。我能给您的最好建议是系统地添加(或删除)您的提示,直到这种行为停止以隔离导致此问题的代码。
| 归档时间: |
|
| 查看次数: |
13795 次 |
| 最近记录: |