Можно ли выделить символы табуляции в терминале?
Используя терминальные последовательности, я могу раскрасить текст в эмуляторе терминала:
$ 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/"
}
Надеюсь, это поможет кому-то еще.