為了防止提示符號從右到左的文字扭曲,我想在 bash 提示字元 (U200e) 中插入零寬度 LRM。由於這是一個零寬度字符,我的直覺是用 包裹它\[<200e>\]
。事實證明,這實際上導致 bash 在錯誤的位置換行。當我不用任何東西包裹它時然後看起來效果很好。
我不明白。即使 bash 自動偵測到這個字元的寬度為零,在它\[...\]
周圍包裹 a 也不應該有任何傷害。
編輯:所以問題是:何時\[...\]
實際需要轉義,如果轉義的字元實際上為零寬度,它怎麼可能有害。
答案1
看貼文 在 bash 中轉義零長度字符。特別是 麥可艾倫的回答 我將其複製如下:
\[
一些實用程式(包括 PS1)使用這些序列來表示\001
和\002
控製程式碼:
\[
=>\x01
或\001
\]
=>\x02
或\002
printf 和 echo 不會進行從
\[
到 的轉換\001
。所以解決方案是我自己進行轉換。而不是將零長度字元包裝在
\[
:echo "\[\033[1;30m\]foo\[\033[0m\]"
這會輸出
\[foo\]
我改為輸出實際的控制碼:
echo "\x01\033[1;30m\x02foo\x01\033[0m\x02"
foo
它在 PS1 printf 和 echo 上輸出。具體範例請參見此提交在 git-radar 上。