一个简单的实现:
extern crate unicode_width;
fn main () {
let prompt = "\x1b[1;32m>>\x1b[0m ";
println!("{}", unicode_width::UnicodeWidthStr::width(prompt));
}
返回12
,但预计会3
。
如果有的话,我也很乐意使用一个已经这样做的箱子。
答案 0 :(得分:1)
您不会使用Unicode宽度计算获取转义序列的宽度,因为在终端上没有任何字符串是可打印的。
如果您控制字符串的内容,则可以通过
计算宽度\x1b
开头的模式,允许[
,]
,<
,{{1}的任意组合}&#39;,>
,=
,?
或十进制数字通过&#34; final&#34; ;
到@
在你的例子中
~
只剩下let prompt = "\x1b[1;32m>>\x1b[0m ";
来衡量。
对于模式......你可以从这里开始:Regex
进一步阅读: