在我的终端中,当我在一行的末尾打字,而不是开始换行时,我的新字符会覆盖同一行的开头。
我在这个主题上看过很多StackOverflow问题,但是没有一个问题对我有帮助。大多数都与不正确的括号颜色有关,但据我所知,我的PS1
看起来很好。
以下是使用bash -x
:
PS1='\[\033[01;32m\]\w \[\033[1;36m\]☔︎ \[\033[00m\] '
是的,这实际上是雨伞;我使用script I wrote对天气进行了Bash提示更新。
编辑: 我的BashWeather脚本实际上可以放置几个天气字符中的任何一个,所以如果我们可以解决所有这些问题,或者想出一些其他解决方案,那将是很好的:
☂☃☽☀︎☔︎
如果下雨的雨伞特别成问题,我可以毫无问题地将其更改为普通雨伞。
答案 0 :(得分:4)
正在打印的符号☔︎由两个Unicode代码点组成:U + 2614(UMBRELLA WITH RAIN DROPS)和U + FE0E(VARIATION SELECTOR-15)。其中第二个是零长度限定符,用于在前面的符号上强制执行“文本样式”,而不是“emoji样式”。如果您使用字体查看此字体可以区分这两种样式,则以下可能是表情符号版本:☔︉否则,您可以在Working Group document N4182中看到一个文本和表情符号变体表(伞位于顶部附近)第3页)。
理论上,U + FE0E应该被识别为零长度码点,就像任何其他组合字符一样。但是,使用“非打印”转义序列PS1
将\[…\]
中的变体选择器包围起来也不会有什么坏处。
将隔离的变体选择器直接粘贴到文件中有点尴尬,所以我建议使用bash的unicode-escape功能:
WEATHERCHAR=$'\u2614\[\ufe0e\]'
#...
PS1=...${WEATHERCHAR}...
请注意,\[
和\]
在参数扩展之前被解释,因此上面定义的WEATHERCHAR
无法动态插入到提示中。另一种方法是使动态插入的字符只是$'\u2614'
伞(或其他),并在提示模板中插入$'\[\ufe0e\]'
以及终端颜色代码等。
当然,根本不需要变量指标。它在我的Ubuntu系统上确实没有任何有用的区别,我使用的终端字体(Deja Vu Sans Mono)使用围绕伞的盒子呈现两种变体,这简直让人分心,而我的浏览器中使用的字体似乎渲染了伞同样有和没有变体。但是YMMV。
答案 1 :(得分:1)
这个几乎对我有用,所以不应该被认为是一个完整的解决方案。这是一个精简的提示,只包含一把伞和一个空格:
PS1='\342\230\[\224\357\270\] '
我使用八进制转义符对伞形字符的UTF-8编码,将最后三个字节放在\[...\]
内,以便bash
不会认为它们会占用屏幕上的空间。我最初把最后的四个字节放入,但至少在我的终端中,有一个显示错误,其中后面是一个额外的字符(一个问号在钻石字形为这个伞确实占据了两个空间。
这可能是bash
和5字节UTF-8序列的问题;使用具有4字节UTF编码的字符不会产生任何问题:
# U+10400 DESERET CAPITAL LETTER LONG I
# (looks like a lowercase delta)
PS1='\360\220\220\200 '