首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在bash提示符中正确使用双字符宽的emoji?

如何在bash提示符中正确使用双字符宽的emoji?
EN

Stack Overflow用户
提问于 2019-01-31 08:22:50
回答 2查看 1.5K关注 0票数 3

我想在我的bash提示符(即PS1环境变量)中使用美国国旗表情符号。但是,美国国旗表情符号会使终端光标向右偏移一个额外的字符。

由两个unicode字符组成,和。我相信终端正在将其转换为单间距的表情字符(旗帜),但仍为两个字符分配空间。如何才能达到预期的光标位置?

我想要的

Desktop akirna ls|

我得到了

游标前的Desktop akirna ls | <<奇怪空格偏移量

我的~/.bash_profile是:

代码语言:javascript
复制
export PS1='  \W \u  '
EN

回答 2

Stack Overflow用户

发布于 2019-04-16 09:04:01

更新的答案

设置提示符的方式不是计算转义字符。在字符串前添加$,使其计算转义代码:

代码语言:javascript
复制
pompt$ export PS1='XY \x08: '
XY \x08: echo "Well that didn't work..."

应该变成:

代码语言:javascript
复制
pompt$ export PS1=$'XY \x08: '
XY: echo "Escape code success!"

(请参阅Charles Duffy对此答案的评论,了解我删除export的原因。)

上面的示例将提示符设置为字符X、Y、空格、退格符、冒号,结果显示的提示符只有"XY:“。

在我的系统上,该标志呈现为两个字符(和),因此我无法验证这一点,但我认为添加一个退格符(\x08)应该对您有效:

代码语言:javascript
复制
PS1=$'  \\W \\u \x08'

关于编辑的说明

我最初的回答建议使用子shell,如下所示:

代码语言:javascript
复制
export PS1=$(printf "XY \x08")

非常感谢Charles Duffy的投入~

票数 1
EN

Stack Overflow用户

发布于 2019-06-20 22:26:01

我通过将字符转换为十六进制来解决这个问题,然后在字符的第二部分放置零宽度标记

所以对于我们来说

代码语言:javascript
复制
PS1='\xf0\x9f\x87\xba\[\xf0\x9f\x87\xb8\] '
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54451605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档