Можно ли выделить символы табуляции в терминале?
-
06-07-2019 - |
Вопрос
Используя терминальные последовательности, я могу раскрасить текст в эмуляторе терминала:
$ echo -e '\e[37;41m--this is white on red--\e[0m'
И это работает.
Далее печатается красный прямоугольник, то есть пробелы имеют красный фон и пустой передний план:
$ echo -e '\e[37;41m \e[0m '
Но следующий текст выводит два красных прямоугольника, разделенных табуляцией:
$ echo -e '\e[37;41m \t \e[0m '
То есть символ табуляции не получает подсветку на красном фоне. Он принимает цвет фона терминала по умолчанию.
Почему вкладка не выделяется как пробел? Могу я заставить это как-то иначе?
Решение 2
Я нашел ответ: нет, вкладка не может быть выделена в совместимом со стандартом эмуляторе терминала. Tab не является пробелом в терминале; это явно символ перемещения курсора для перехода к следующей позиции табуляции. Таким образом, по сути, мой пример говорит «напечатать два пробела на красном фоне, перейти к следующей позиции табуляции, а затем напечатать еще два пробела на красном фоне». Р>
Обходной путь - это предложение от ankon преобразовать вкладки в пробелы перед печатью.
Другие советы
Если вам не нужны вкладки в качестве вкладок, вы можете предварительно обработать ваш текст с помощью функции расширения (1).
Потому что мне было трудно найти хорошее решение (и эта страница была первым результатом поиска) ... Это то, что у меня есть в файле .bashrc (с http://pastebin.com/Pn1fkkJq с изменениями):
catt() { # Highlight whitespace on the terminal -- rolfwr
local C=`printf '\033[0;36m'` R=`printf '\033[0m'`
#cat "$@" | sed -e "s/ /${C}▹▹▹▹▹▹▹▹$R/g" -e "s/ /${C}·$R/g" -e "s/$/${C}⁋$R/"
#cat "$@" | sed -e "s/ /${C}·$R/g" -e "s/\t/${C} ▹▹ $R/g" -e "s/$/${C}⁋$R/"
cat "$@" | sed -e "s/ /${C}·$R/g" | expand | sed -e "s/ \( *\)/${C}▹\1$R/g" -e "s/$/${C}⁋$R/"
#cat "$@" | sed -e "s/ /${C}.$R/g" | expand | sed -e "s/ \( *\)/${C}>\1$R/g" -e "s/$/${C}P$R/"
}
Надеюсь, это поможет кому-то еще.