В настоящее время я работаю над проектом C++. Я использую CMake в качестве системы сборки, и я хотел бы, чтобы все связанные с CMake файлы (например, CMakeLists.txt) по-разному окрашивались в выводе команды ls . Таким образом, я мог легко отличить их от файлов исходного кода.

Я пытался как использовать dircolors и редактировать напрямую $LS_COLORS env var. Я потерпел неудачу в обоих случаях. Похоже, что эти решения предоставляют только способ окрасить либо некоторые специфичные для 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 но тогда все текстовые файлы будут окрашены таким образом.

Раскраска Makefile (файла без расширения) в вывод ls была бы хорошим бонусом.

Я использую Debian 9 с bash 4.4.12 и ls 8.26.

Заранее спасибо.

2 ответа2

0

Я не знаю, сможете ли вы сделать это напрямую с помощью 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 в определенной степени отделенными. Но это не ответ на ваш вопрос и может оказаться невозможным в вашей структуре проекта ...

0

Вы можете сделать это с помощью 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .