我想在我的bash提示符(即PS1环境变量)中使用美国国旗表情符号。但是,美国国旗表情符号会使终端光标向右偏移一个额外的字符。
由两个unicode字符组成,和。我相信终端正在将其转换为单间距的表情字符(旗帜),但仍为两个字符分配空间。如何才能达到预期的光标位置?
我想要的:
Desktop akirna ls|
我得到了:
游标前的Desktop akirna ls |
<<奇怪空格偏移量
我的~/.bash_profile
是:
export PS1=' \W \u '
发布于 2019-04-16 09:04:01
更新的答案
设置提示符的方式不是计算转义字符。在字符串前添加$,使其计算转义代码:
pompt$ export PS1='XY \x08: '
XY \x08: echo "Well that didn't work..."
应该变成:
pompt$ export PS1=$'XY \x08: '
XY: echo "Escape code success!"
(请参阅Charles Duffy对此答案的评论,了解我删除export
的原因。)
上面的示例将提示符设置为字符X、Y、空格、退格符、冒号,结果显示的提示符只有"XY:“。
在我的系统上,该标志呈现为两个字符(和),因此我无法验证这一点,但我认为添加一个退格符(\x08)应该对您有效:
PS1=$' \\W \\u \x08'
关于编辑的说明
我最初的回答建议使用子shell,如下所示:
export PS1=$(printf "XY \x08")
非常感谢Charles Duffy的投入~
发布于 2019-06-20 22:26:01
我通过将字符转换为十六进制来解决这个问题,然后在字符的第二部分放置零宽度标记
所以对于我们来说
PS1='\xf0\x9f\x87\xba\[\xf0\x9f\x87\xb8\] '
https://stackoverflow.com/questions/54451605
复制相似问题