Выделение цветом определенных имен файлов (не расширений) в выводе `ls`, например Makefile или CMakeLists.txt

Выделение цветом определенных имен файлов (не расширений) в выводе `ls`, например Makefile или CMakeLists.txt

В настоящее время я работаю над проектом 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 и ls8.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напрямую. (Но это может быть...)

Моя идея заключается в том, чтобы передать вывод в lssed, который сможет раскрашивать свои соответствия регулярным выражениям.

Вот хороший фрагмент, который делает это:https://github.com/kepkin/dev-shell-essentials/blob/master/highlight.sh

Вы можете написать цепочку каналов, которая соответствует всем файлам cmake: ls | highlight blue CMakeLists.txt | highlight blue foobar.baz ...(и создать для этого псевдоним)

Но это, конечно, обходной путь.

Лично я бы выбрал использование сборок из исходного кода и сохранение файлов cmake в определенной степени разделенными. Но это не ответ на ваш вопрос и может оказаться невозможным в структуре вашего проекта...

Связанный контент