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 dircolors
direkt 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 .txt
und .cmake
Dateien einfärben, aber dann wären alle Textdateien auf diese Weise eingefärbt.
Das Einfärben eines Makefiles (einer Datei ohne Erweiterung) in der ls
Ausgabe wäre ein netter Bonus.
Ich verwende Debian 9 mit bash
4.4.12 und ls
8.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 ls
direkt machen können. (Aber es könnte sein ...)
Meine Idee wäre, die Ausgabe an ls
sed 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 ...