Вопрос

Используя терминальные последовательности, я могу раскрасить текст в эмуляторе терминала:

$ 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/"
}

Надеюсь, это поможет кому-то еще.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top