我的提示效果很好,看起来像这样:
export PS1="\[${ORANGE}\]\u \[${DARK}\]@ \[${YELLOW}\]\h \[${DARK}\]in \[${CYAN}\]\[$CUR_DIR\] \[${LIGHT}\]\$ "
我希望能够在前面或后面添加以下\ 342 \ 203 \ 240代码。
我无法使其正常工作。停止符号看起来是正确的,但每当我有一个长命令和退格键来删除长命令(一个足够长的命令将终端包装到一个新行)时,提示会覆盖自己。这些线条不会互相覆盖,但当我退回到命令的末尾时...不知何故,我可以再退格2次......如果这是有道理的。据推测,我错过了逃脱序列或其他东西,但我无法弄清楚什么是readline(?)不喜欢/理解。我想修复的破碎的例子:
export PS1="\[${BLDRED}\]\[\342\203\240\] \[${LIGHT}\]: \[${ORANGE}\]\u \[${DARK}\]@ \[${YELLOW}\]\h \[${DARK}\]in \[${CYAN}\]\[$CUR_DIR\] \[${LIGHT}\]\$ "
OSX Yosemite:GNU bash,版本3.2.53(1)-release(x86_64-apple-darwin14)
我做错了什么?
更新
完整提示:
理想情况下,注释掉的行就是提示符。
ORANGE="\[\e[38;5;214m\]"
YELLOW="\[\e[38;5;228m\]"
CYAN="\[\e[0;36m\]"
BLDGRN="\[\e[1;32m\]" # Green - Bold
BLDRED="\[\e[1;31m\]" # Red - Bold
WHITE="\[\e[1;37m\]"
LIGHT="\[\e[0;37m\]"
DARK="\[\e[38;5;240m\]"
function lastc() {
status=$?
CUR_DIR=$(basename "$PWD")
if test $status -ne 0 ; then
#export PS1="\[${BLDRED}\]\[\342\203\240\] \[${LIGHT}\]: \[${ORANGE}\]\u \[${DARK}\]@ \[${YELLOW}\]\h \[${DARK}\]in \[${CYAN}\]\[$CUR_DIR\] \[${LIGHT}\]\$ "
export PS1="\[${ORANGE}\]\u \[${DARK}\]@ \[${YELLOW}\]\h \[${DARK}\]in \[${CYAN}\]\[$CUR_DIR\] \[${LIGHT}\]\$ "
else
# export PS1="\[${BLDGRN}\]\[\342\234\223\] \[${LIGHT}\]: \[${ORANGE}\]\u \[${DARK}\]@ \[${YELLOW}\]\h \[${DARK}\]in \[${CYAN}\]\[$CUR_DIR\] \[${LIGHT}\]\$ "
export PS1="\[${ORANGE}\]\u \[${DARK}\]@ \[${YELLOW}\]\h \[${DARK}\]in \[${CYAN}\]\[$CUR_DIR\] \[${LIGHT}\]\$ "
fi
}
PROMPT_COMMAND = lastc
答案 0 :(得分:0)
问题是你用{/ 1>告诉bash
\[\342\203\240\]
当命令行实际占用一个空格时,预期字符占用零空间。一个(不那么优雅)修复只包含\[...\]
中的两个UTF-8字节:
\[\342\203\]\240
告诉bash
只忽略3个"字符中的2个"计算提示的长度时。 \[
/ \]
对本身实际上并未输出到终端,因此它根本不会影响提示的显示,只是bash
对其长度的解释
答案 1 :(得分:0)
实际上,答案最终是:
export PS1="\[${BLDRED}\]\342\203\240 \[${LIGHT}\]: \[${ORANGE}\]\u \[${DARK}\]@ \[${YELLOW}\]\h \[${DARK}\]in \[${CYAN}\]\[$CUR_DIR\] \[${LIGHT}\]\$ "