And*_*Ray 7 unicode bash prompt
我有一个特定的方法用于我的bash提示,让我们说它看起来像这样:
CHAR="? "
my_function="
prompt=\" \[\$CHAR\]\"
echo -e \$prompt"
PS1="\$(${my_function}) \$ "
Run Code Online (Sandbox Code Playgroud)
为了解释上面的内容,我通过执行存储在字符串中的函数来构建我的bash提示符,这是由于这个问题而做出的决定.让我们假装它工作正常,因为它确实如此,除非涉及到unicode字符
我试图找到逃脱unicode角色的正确方法,因为现在它与bash线长度混淆.测试它是否被破坏的简单方法是键入一个长命令,执行它,按CTRL-R并键入以找到它,然后按CTRL-A CTRL-E跳转到该行的开头/结尾.如果文本出现乱码,那么它就无法正常工作.
我已经尝试了几个方法来正确地转义函数字符串中的unicode字符,但似乎没有任何工作.
像这样的特殊人物:
COLOR_BLUE=$(tput sgr0 && tput setaf 6)
my_function="
prompt="\\[\$COLOR_BLUE\\] \"
echo -e \$prompt"
Run Code Online (Sandbox Code Playgroud)
这是我提示函数字符串的主要原因.那个转义序列不会弄乱行长度,它只是unicode字符.
该\\[...\\]
序列表示完全忽略字符串的这一部分,当提示包含零长度序列(例如更改文本颜色或标题栏的控制序列)时,这很有用。但在本例中,您正在打印一个字符,因此它的长度不为零。也许你可以通过使用无操作转义序列来欺骗 Bash 来计算正确的行长度来解决这个问题,但听起来这种方式很疯狂。
正确的解决方案是 Bash 中的行长度计算正确地使用 UTF-8(或您正在使用的任何 Unicode 编码)。嗯,你试过没有\\[...\\]
顺序吗?
编辑:以下实现了我在下面的评论中提出的解决方案。保存光标位置,然后打印两个空格,在 之外\\[...\\]
,然后恢复光标位置,并在两个空格的顶部打印 Unicode 字符。这假定字体宽度固定,Unicode 字符具有双倍宽度。
PS1=\'\\[\'"`tput sc`"\'\\] \\[\'"`tput rc`"\'\xe0\xbc\x87 \\] \\$ \'\n
Run Code Online (Sandbox Code Playgroud)\n\n至少在 OSX 终端、Bash 3.2.17(1) 版本中,这通过了粗略的[原文如此]测试。
\n\n为了透明度和易读性,我忽略了在函数内具有提示功能的要求以及颜色编码;这只是将提示更改为字符、空格、美元提示、空格。适应您更复杂的需求。
\n 归档时间: |
|
查看次数: |
6525 次 |
最近记录: |