自定义Bash提示符中箭头符号被截断的问题求助
自定义Bash提示符中箭头符号被截断的问题求助
大家好,我现在碰到个Bash提示符的小麻烦,想请教下有没有解决办法。
我目前在用一个自定义的Bash提示符,这个命令是之前某个问题的解决方案,具体代码是这样的:
PS1=$'\e[1;33m\\t \e[36m\u\e[34m@\e[36m\h\e[;1m: \e[34m\w\n \[\b\e[;1;31m✘\] ${?/#0/\[\b\b\e[32m✓ \]}${?/#[1-9]*/ }\[\b→\e[;1m\] \$: \[\e[m\]'
当命令执行成功(退出码0)和失败(退出码非0)时,提示符里的箭头总是会被截断——虽然不影响使用,但看着特别别扭。我试过换了好几种等宽字体,结果都有截断的情况,只是程度不一样,直到我试了DejaVu Sans Mono字体,箭头才完全正常显示。
其实最开始我用的是另一个版本的提示符配置,用PROMPT_COMMAND来动态生成,代码如下:
set_PS1() { local Exit_Code="$?" local Reset="\\[$(tput sgr0 )\\]" local Bold="\\[$(tput bold )\\]" local Red="\\[$(tput setaf 1 )\\]" local Green="\\[$(tput setaf 2 )\\]" local Yellow="\\[$(tput setaf 3 )\\]" local Blue="\\[$(tput setaf 4 )\\]" local MagentaBG="\\[$(tput setab 5 )\\]" local Cyan="\\[$(tput setaf 6 )\\]" local Whoami='\u' local Where='\w' local Hostname='\h' local Time='\D{%H:%M:%S}' # Emoji are multi-byte, but shells think 1 byte = 1 character # We add a 1-character space, then enable color-code mode to ignore # the upcoming emoji, then backspace to draw the emoji on top of the space. local emoji_start=$' \\[\b' local emoji_end=$'\\]' if (($Exit_Code == 0 )); then local exit_code_prompt="$Green$emoji_start"$'\xE2\x9C\x93'"$emoji_end $emoji_start"$'\xE2\x86\x92'"$emoji_end" # Green checkmark symbol else local exit_code_prompt="$Red$emoji_start"$'\xE2\x9C\x98'"$emoji_end $Exit_Code $emoji_start"$'\xE2\x86\x92'"$emoji_end" # Red cross mark symbol and exit code fi local Line_1="$Bold$Yellow$Time $Cyan$Whoami$Blue@$Cyan$Hostname$Reset$Bold":" $Blue$Where$Reset" local Line_2="$Bold$exit_code_prompt $Reset$Bold \\$: $Reset" #local Line_2="$Bold \$: $Reset" PS1="$Line_1\\n$Line_2" } # We need to expand exit_code_prompt BEFORE PS1 prompt string expansion (see shopt promptvars in man bash) # so we need to move it to PROMPT_COMMAND which runs earlier. PROMPT_COMMAND=set_PS1
这个版本里箭头显示完全正常,但有个致命问题:当我进入Python虚拟环境(venv)之后,箭头就不显示了,这对我来说完全没法用,所以只好换成现在这个短版本,但箭头截断的问题又回来了。
有没有办法既能解决箭头截断的问题,又能保证在Python虚拟环境里箭头正常显示呢?麻烦大家帮我想想办法!
备注:内容来源于stack exchange,提问作者reneas
相关产品推荐
相关产品推荐

