Xaq*_*Xaq 13 bash ansi command-prompt cursor-position
如果我设置我的命令提示符,如:
export PS1='\033[0;33m[\u@\h \w]\$ \033[00m'
Run Code Online (Sandbox Code Playgroud)
提示的颜色将为黄色,"$"字符后面的所有内容都将是默认的终端颜色.这就是我的期望.但是,如果我回想起一个命令行并尝试编辑它,移动光标 - 如果命令行我正在尝试编辑,则移动光标 - UpArrow/Ctrl-A(设置-o emacs)或ESC K(设置-o vi)足够长,光标不位于命令的开头.键入Ctrl-A(设置-o emacs)或^(设置-o vi)不会将光标移动到我看到的屏幕上调用行的开头.类似地,尝试将光标定位到行的末尾(Ctrl-E或$,取决于)会导致将多个字符放置在看似行的末尾.看起来bash被我添加到提示符中的转义字符搞糊涂了.
che*_*ner 22
您需要将非打印字符括起来,\[ ... \]以便bash在计算提示的长度时知道忽略它们:
export PS1='\[\033[0;33m\][\u@\h \w]\$ \[\033[00m\]'
Run Code Online (Sandbox Code Playgroud)