Как посчитать символ вместо длины строки с помощью Fish? - PullRequest
0 голосов
/ 07 декабря 2018

В обсуждении по запросу pull для чистой темы для рыбы мы задаемся вопросом, как посчитать количество символов вместо длины строки.

Выполнение этого позволит реорганизовать наш код более элегантным / поддерживаемым / тестируемым способом.

❯ set -l down_arrow "⇣"
❯ string length $down_arrow
1

❯ set -l down_arrow_red (set_color red)"⇣"(set_color normal)
❯ string length $down_arrow_red
15

Вопрос

По второй строке мы получим 15, ночто нас волнует, так это то, что мы получили один глиф (например, ), а не весь синтаксис окраски.

Как мы можем получить это с рыбой?

1 Ответ

0 голосов
/ 07 декабря 2018

Одним из возможных решений с использованием sed является передача нашей переменной с помощью этой команды:

sed 's/\x1b\[[0-9;]*m//g'

As

❯ echo $user_and_host | sed 's/\x1b\[[0-9;]*m//g' | string length
11

Test

❯ set -l user (set_color red)root
❯ set -l at (set_color grey)@
❯ set -l host (set_color blue)remote
❯ set user_and_host "$user$at$host"

❯ echo $user_and_host
root@remote  
❯ string length $user_and_host
26  # should be 11
...