由于搞砸了PS1,我对在Bash中的键入感到有些厌倦。例如,我将执行一条命令,例如ls
,然后在运行时开始输入下一条命令,例如,而echo
typeaheadecho
将出现在PS1之前,例如
/$ls
...
ec/$echo
(这/$
是PS1
)。我对此的解决方案是将其添加\r
到PS1的前端,以便首先清除该行。
这似乎工作得很好,但是似乎有一个奇怪的问题。在我.inputrc
,我有
"\ep": history-search-backward
让我输入M-p
后退(iTerm 2将Option映射为正确转义)。
问题是,有时当我键入一些内容然后M-p
获取上一个命令时,我会执行aC-u C-k
来清除该行,第一个字符会保留,并成为的一部分PS1
(它从已执行的行中删除,但显示出来了在PS1上)。当我执行命令时,它消失了,但是每当我在历史记录中击中该项目时,即使使用常规的向上箭头,该第一个字符也会再次卡在该位置。这似乎只在一定长度的命令中发生。\r
实际是否清除任何文本以使其发生都没关系。
我在bash和/或iTerm中遇到一个奇怪的错误吗?是否在正确的方法之前增加\r
了PS1
清除杂物的正确方法?
信号通知bash
,该\r
字符是非打印字符,因此将计算提示字符串的正确长度,即代替
PS1='\rstuff'
使用
PS1='\[\r\]stuff'
我认为由于\r
是在提示的开头,所以它始终是零长度字符,而不是可变长度的负宽度字符,因为如果它出现在提示som的中间,则可以考虑将其考虑在内,因此应该工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句