В настоящее время я работаю над проектом C++. Я использую CMake в качестве системы сборки и мне бы хотелось, чтобы все файлы, связанные с CMake (например CMakeLists.txt
), были окрашены в разные цвета в ls
выводе команды. Таким образом, я мог бы легко отличить их от файлов исходного кода.
Я пытался и использовать, dircolors
и редактировать env var напрямую $LS_COLORS
. В обоих случаях у меня ничего не получилось. Похоже, что эти решения предоставляют только способ раскрасить некоторые специфичные для Linux файлы (например, ссылки) или выбранные расширения.
Подводя итог, вот что я сделал:
OLD_LS_COLORS=$LS_COLORS # Backup
export LS_COLORS="${LS_COLORS}CMakeLists.txt=00;36:" # Adding it at the beginning of the list also fails
ls # No colors at all
export LS_COLORS=$OLD_LS_COLORS # Cleanup
dircolors -p > ~/.dir_colors
echo "CMakeLists.txt 01;33" >> ~/.dir_colors
eval `dircolors ~/.dir_colors` # Throws "unrecognized keyword CMakeLists.txt"
Обходным путем для моей проблемы было бы раскрашивать исходные файлы ( .hxx
, .cxx
), но я бы хотел придерживаться раскрашивания только файлов CMake. С другой стороны, я мог бы раскрасить только файлы .txt
и , .cmake
но тогда все текстовые файлы были бы раскрашены таким образом.
ls
Приятным бонусом было бы выделение цветом Makefile (файла без расширения) в выходных данных.
Я использую Debian 9 с bash
версиями 4.4.12 и ls
8.26.
Заранее спасибо.
решение1
Это можно сделать с помощью ls.
*Makefile 38;5;155
*CMakeLists.txt 48;5;89;38;5;197;1;3;4;7
Видетьhttps://github.com/trapd00r/LS_COLORS/blob/master/LS_COLORS
решение2
Я не знаю, можно ли это сделать ls
напрямую. (Но это может быть...)
Моя идея заключается в том, чтобы передать вывод в ls
sed, который сможет раскрашивать свои соответствия регулярным выражениям.
Вот хороший фрагмент, который делает это:https://github.com/kepkin/dev-shell-essentials/blob/master/highlight.sh
Вы можете написать цепочку каналов, которая соответствует всем файлам cmake:
ls | highlight blue CMakeLists.txt | highlight blue foobar.baz ...
(и создать для этого псевдоним)
Но это, конечно, обходной путь.
Лично я бы выбрал использование сборок из исходного кода и сохранение файлов cmake в определенной степени разделенными. Но это не ответ на ваш вопрос и может оказаться невозможным в структуре вашего проекта...