修复了Mac OS X上bash换行和退格显示错误的问题?


14

当我打开终端(在Mac OS X 10.5.8上)并键入一个长命令行时: 替代文字

...文字环绕时不会转到下一行: 替代文字 替代文字

另外,有时当我键入命令然后按退格键(或向上箭头或^ U)时: 替代文字

...整个行不会被删除,并且我不能在特定点后退空格: 替代文字 替代文字

这是已知的bash错误(在Mac OS X上)吗?有解决办法吗?

更新: Juliano是正确的,问题是由于在PS1变量中错误地分隔控制台代码序列引起的。变更:

export PS1='\[\033[1;34m\]\$\]\033[0m\] '

...对我来说.bashrc

export PS1='\[\033[1;34m\]\$\[\033[0m\] '

...解决了这个问题。


1
+1是我所见过的最美丽的终端屏幕截图。
暂停,直到另行通知。

1
您在更新中显示的两条代码行是相同的。
Magne 2013年

好收成,@ Magne。自从我看过这已经有四年了,所以我记不清了,但是我认为“之前”缺少\]
Daryl Spitzer

它们不相同:第1之一具有\]代替“[`
辖科恩

Answers:


19

该行为与在提示中包含控制台代码(更改颜色等)并且未正确进行标记一致,以便bash知道它们是不可见的。

在执行其他操作之前,请执行以下操作:

PS1='\w\$ '

然后再试一次。如果问题解决了,那我的猜想是正确的。

每个控制台代码序列必须使用\[\]在PS1变量中定界。他们告诉bash,其中的任何内容都不会移动光标位置。阅读bash手册以获取更多信息。


那就是问题所在。谢谢!我将详细更新我的问题。
Daryl Spitzer

如果不能解决问题怎么办?
levesque

3

为了帮助生成经过清理的提示,请尝试http://www.kirsle.net/wizards/ps1.html,它非常棒。请注意提示中的方括号,它会尝试将其转义。


+1虽然@Juliano的答案在技术上是正确的,但此链接设置了正确的tput命令-固定了换行符,``换行符和其他“历史记录+后退间距”修复程序,这些错误是使用其他ANSI代码无法解决的。
埃里克·邓肯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.