Ich habe mich gestern Abend etwas geärgert, dass cat und less kein Syntax-Highlighting beherrschen. Immer wieder erwische ich mich dabei, dass ich Dateien in einem Editor betrachte, der mir den Code eben farbig und damit auch übersichtlich ausgeben kann. Allerdings ist es gar nicht so aufwändig cat und less ein bisschen Farbe beizubringen, gibt es doch mit dem Python Syntax Highlighter Pygments ein mächtiges Werkzeug, das den beiden Kommandos Syntax-Highlighting lernen kann.
Pygments ist in einer Standard-Installation von Ubuntu nicht vorinstalliert, von daher müsst ihr den Syntax-Highlighter noch über die Paketverwaltung nachinstallieren. Das Paket „python-pygments“ gibt es in allen noch unterstützten Ubuntu-Versionen. Anschließend könnt ihr gleich euren Editor der Wahl anwerfen und die ~/.bashr
zum Editieren aufrufen, ich mache das Ganze hier mit Gedit.
$ sudo apt-get install python-pygments $ gedit ~/.bashrc
Fügt nun ans Ende der Datei – oder an einem anderen Platz, wo ihr schon eure eigenen Bash-Aliase aufbewahrt – folgende Zeilen Code ein. Sie ermöglichen über die Kommandos ccat
und eben cless
(color-cat und color-less) den Aufruf der Befehle mit pygmentize als Syntax Highlighter.
# Eure eigenen Aliase.... alias ccat='pygmentize -g' function cless() { pygmentize -g "$1" | less -R }
Damit ihr abschließend euer Terminalfenster nicht schließen und wieder neu öffnen müsst, lasst ihr das System jetzt die ~/.bashrc
umgehend wieder neu einlesen, so dass eure neuen Aliase (und die Funktion) sofort aktiv werden.
$ source ~/.bashrc
Danach ist der Kuchen eigentlich gegessen, der Aufruf von ccat foo
oder cless bar
bringt in Zukunft wieder mal ein kleines bisschen mehr Farbe ins Terminal, diesmal hat die Sache sogar etwas mehr Nutzen als der Regenbogen mit lolcat.
Prima! Danke für den Tipp! 🙂
Das scheint nur mit Unicode-Dateien zu funktionieren. cless auf die gerade geänderte ~/.bashrc angewendet, führt zu folgendem Fehler:
*** Error while highlighting:
UnicodeDecodeError: ‚utf8‘ codec can’t decode byte 0xf6 in position 3162: invalid start byte
(file „/usr/lib/python2.7/encodings/utf_8.py“, line 16, in decode)
Diese .bashrc ist uralt und ISO-8859-kodiert – wie die meisten meiner Text-basierten Dateien …
Trotzdem danke für den Tipp!
Diese Zeichencodierungen können eine ganz schöne Crux sein… Ich bin meistens mit UTF8 unterwegs.
Grüße
Christoph
Auch von mir danke für den Tipp. Einziger Wermutstropfen, leider kann man dann nicht mehr von less direkt in einen Editor springen.
…wäre ein sehr nützliches Feature doch leider kann less dies nicht, genausowenig wir irgendein anderer mir bekannter Pager (more, most,…).
Aber es gibt ein cooles Makro für vim welches less mit Syntax-Highlighting nachbaut. Mit diesem Makro verhält sich vim zu 99% genauso wie less, nur dass man noch Syntax-Highlighting dazu hat. Bei mir liegt das Makro-Skript in /usr/share/vim/vim72/macros/less.sh, ansonsten könnt ihr es mit:
$ locate „macros/less.sh“
bei euch sicherlich finden, wenn ihr vim installiert habt.
Das Skript ruft ihr genauso auf wie less, also
/usr/share/vim/vim72/macros/less.sh DATEINAME
Durch drücken von h, könnt ihr euch dann wie in less gewohnt eine kleine Hilfe anzeigen lassen, doch die Tastenbelegung ist eigentlich genau die gleiche wie in less. Zu dem Makro an sich gibt es in vim mit
:help less
eine Erklärung. Wenn ihr dieses Makro dann anstelle von less nutzen wollt solltet ihr euch einfach ein alias in eurer .bashrc (oder .zshrc oder …) anlegen:
alias less =“/usr/share/vim/vim72/macros/less.sh“
Und schon habt ihr Syntax-Highlighting für less
via: https://rorschachstagebuch.wordpress.com/2010/03/10/syntax-highlighting-fur-less/
vim als pager ist eine gute Idee. Da ich sowieso vim verwende, habe ich mir vimpager besorgt. Damit klappt das Syntaxhighlighting problemlos.
@Jeremias+Stefan, less.sh hatte ich auch im Netz gefunden, aber ich fand die Lösung ohne vim gar nicht mal so schlecht, reicht für meine Zwecke meist aus, auch wenn sie nicht perfekt ist.
Grüße
Christoph
Hallo Christoph. Vielen Dank für den nützlichen Tipp.
Hi Hampa, gerne geschehen. Btw, nettes Blog 🙂
Grüße
Christoph
Hallo Christoph, danke für’s Kompliment. Ich sollte bloss mehr Zeit dafür investieren.
Wow!
Funktioniert auch mit der zsh.
Danke, Christoph