Можно ли выделить символы табуляции в терминале? - PullRequest
2 голосов
/ 26 октября 2009

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

$ 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 '

То есть символ табуляции не получает подсветку на красном фоне. Он принимает цвет фона терминала по умолчанию.

Почему вкладка не выделяется как пробел? Могу я заставить это как-нибудь по-другому?

Ответы [ 3 ]

3 голосов
/ 29 октября 2009

Я нашел ответ: нет, вкладка не может быть выделена в стандартном эмуляторе терминала. Tab не является пробелом в терминале; это явно символ перемещения курсора для перехода к следующей позиции табуляции. Таким образом, мой пример говорит: «напечатать два пробела на красном фоне, перейти к следующей позиции табуляции, а затем напечатать еще два пробела на красном фоне».

Обходным решением будет предложение ankon преобразовать вкладки в пробелы перед печатью.

3 голосов
/ 26 октября 2009

Если вам не нужны вкладки в качестве вкладок, вы можете предварительно обработать ваш текст с помощью функции расширения (1).

0 голосов
/ 14 августа 2012

Потому что мне было трудно найти хорошее решение (и эта страница была первым результатом поиска) ... Вот что у меня есть в файле .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/"
}

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

...