首页 文章

在调用/编辑命令时,将ANSI颜色转义序列添加到bash提示符会导致光标位置错误

提问于
浏览
12

如果我设置我的命令提示符如下:

export PS1='\033[0;33m[\u@\h \w]\$ \033[00m'

提示的颜色将为黄色,“$”字符后面的所有内容都将是默认的终端颜色 . 这就是我的期望 . 但是,如果我回想起一个命令行并尝试编辑它,移动光标 - 如果我正在尝试编辑命令行,则移动光标 - UpArrow / Ctrl-A(设置-o emacs)或ESC K(设置-o vi)足够长,光标不位于命令的开头 . 键入Ctrl-A(设置-o emacs)或^(设置-o vi)不会将光标移动到我所看到的屏幕上调用行的开头 . 类似地,尝试将光标定位到行的末尾(Ctrl-E或$,取决于)会导致将多个字符放置在看似行的末尾 . 看起来bash被我添加到提示符中的转义字符搞糊涂了 . 这是我必须处理的事情,当我想编辑召回的行时,将我的提示改为单色的,或者有没有办法让bash正确地允许用彩色提示编辑召回的命令?

1 回答

  • 20

    您需要在 \[ ... \] 中包含非打印字符,以便 bash 在计算提示的长度时知道忽略它们:

    export PS1='\[\033[0;33m\][\u@\h \w]\$ \[\033[00m\]'
    

相关问题