Farbspezifische Dateinamen (keine Erweiterungen) in der `ls`-Ausgabe wie Makefile oder CMakeLists.txt

Farbspezifische Dateinamen (keine Erweiterungen) in der `ls`-Ausgabe wie Makefile oder CMakeLists.txt

Ich arbeite derzeit an einem C++-Projekt. Ich verwende CMake als Build-System und hätte gerne alle CMake-bezogenen Dateien (wie CMakeLists.txt) in der Befehlsausgabe anders eingefärbt ls. Auf diese Weise könnte ich sie leicht von den Quellcodedateien unterscheiden.

Ich habe versucht, die Umgebungsvariable sowohl dircolorsdirekt zu verwenden als auch zu bearbeiten $LS_COLORS. In beiden Fällen ist es nicht gelungen. Es scheint, dass diese Lösungen nur eine Möglichkeit bieten, entweder einige Linux-spezifische Dateien (z. B. Links) oder ausgewählte Erweiterungen einzufärben.

Um es zusammenzufassen, das habe ich getan:

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"

Eine Lösung für mein Problem wäre, stattdessen die Quelldateien ( .hxx, .cxx) einzufärben, aber ich möchte mich lieber darauf beschränken, nur CMake-Dateien einzufärben. Andererseits könnte ich auch nur .txtund .cmakeDateien einfärben, aber dann wären alle Textdateien auf diese Weise eingefärbt.

Das Einfärben eines Makefiles (einer Datei ohne Erweiterung) in der lsAusgabe wäre ein netter Bonus.

Ich verwende Debian 9 mit bash4.4.12 und ls8.26.

Dank im Voraus.

Antwort1

Das geht mit ls.

*Makefile       38;5;155
*CMakeLists.txt 48;5;89;38;5;197;1;3;4;7

Sehenhttps://github.com/trapd00r/LS_COLORS/blob/master/LS_COLORS

Antwort2

Ich weiß nicht, ob Sie das lsdirekt machen können. (Aber es könnte sein ...)

Meine Idee wäre, die Ausgabe an lssed weiterzuleiten, das seine Regex-Übereinstimmungen einfärben kann.

Es gibt einen netten Codeausschnitt, der dies tut:https://github.com/kepkin/dev-shell-essentials/blob/master/highlight.sh

Sie könnten eine Pipe-Kette schreiben, die mit allen cmake-Dateien übereinstimmt: ls | highlight blue CMakeLists.txt | highlight blue foobar.baz ...(und dafür einen Alias ​​erstellen)

Aber das ist natürlich ein Workaround.

Ich persönlich würde Out-of-Source-Builds verwenden und die cmake-Dateien bis zu einem gewissen Grad getrennt halten. Dies ist jedoch keine Antwort auf Ihre Frage und ist in Ihrer Projektstruktur möglicherweise nicht möglich ...

verwandte Informationen