Можно ли выделить символы табуляции в терминале?

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

$ 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 ответа

Решение

Я нашел ответ: нет, вкладка не может быть выделена в стандартном эмуляторе терминала. 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/"
}

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

Другие вопросы по тегам