Syntaxhervorhebung im Terminal

43

Viele programmorientierte Editoren werden den Quellcode einfärben. Gibt es einen Befehl, der den Quellcode für die Anzeige im Terminal einfärbt?

Ich konnte eine Datei öffnen mit emacs -nw(die statt im Terminal öffnet knallt ein neues Fenster), aber ich bin auf der Suche nach etwas , das funktioniert wie less(oder das funktioniert mit less -R , die durch in seinem Eingang Escape - Sequenzen Farbe geht).

alexis
quelle

Antworten:

66

Mit highlightauf einem Terminal, das die gleichen Farbfluchtsequenzen unterstützt wie xterm:

highlight -O xterm256 your-file | less -R

Mit ruby-rouge:

rougify your-file | less -R

Mit python-pygments:

pygmentize your-file | less -R

Mit GNUsource-highlight :

source-highlight -f esc256 -i your-file | less -R

Sie können es auch vimmit Hilfe des macros/less.shmitgelieferten Skripts als Pager verwenden vim( Einzelheiten siehe :h lessinnerhalb vim):

Auf meinem System:

sh /usr/share/vim/vim74/macros/less.sh your-file

Oder Sie können einen der Syntax-Highlighter verwenden, die HTML-Ausgabe unterstützen und elinksoder w3mals Pager (oder elinks -dump -dump-color-mode 3 | less -R) wie bei GNU verwendensource-highlight :

source-highlight -o STDOUT -i your-file | elinks -dump -dump-color-mode 3 | less -R
Stéphane Chazelas
quelle
Highlight kann Text in SVG / HTML konvertieren, was sehr aufregend ist.
utopic eexpress
14

Ich benutze dazu GNU in source-highlightKombination mit less -R. Fügen Sie der Initialisierungsdatei Ihrer Shell ~/.bashrcbeispielsweise die folgenden Zeilen hinzu :

cless(){
 LESSOPEN='| source-highlight --failsafe --out-format=esc256 -o STDOUT -i %s 2>/dev/null ' less -R "$@"
}

Das sollte automatisch den Quellcode entsprechend der verwendeten Sprache einfärben und, falls dies nicht möglich ist, wird es lessbei der Eingabe direkt gestartet .

terdon
quelle
6

Wenn Sie sich lessallgemein für Farben interessieren , sollten Sie sich diese ansehen lesspipe.sh. Siehe zum Beispiel http://freecode.com/projects/lesspipe .

lesspipe.sh ist ein Eingabefilter für den Pager less, wie in der Manpage von less beschrieben. Das Skript läuft unter einer ksh-kompatiblen Shell (z. B. bash, zsh) und ermöglicht es Ihnen, Dateien mit binärem Inhalt, komprimierten Dateien, Archiven und in Archiven enthaltenen Dateien mit weniger Aufwand anzuzeigen.

Es koloriert auch Shell-Skripte, Perl-Skripte usw. ähnlich einem Texteditor, jedoch ohne die Verwendung eines "Vorverarbeitungs" -Programms, um die Kolorierung durchzuführen.

DaveEmme
quelle
Vielen Dank! Ich denke, lesspipe.shich habe versucht, mich zu erinnern, bevor ich die Frage gestellt habe ...
alexis
2

Ich mag die Einfachheit und benutze den Nano-Texteditor. In diesem Fall gehe ich normalerweise wie folgt vor:

check witch syntax highlight ist verfügbar: ls -la /usr/share/nano/

füge es mit folgendem Befehl oder manuell in meine nanorc-Datei ein

echo 'include /usr/share/nano/sh.nanorc' >> ~/.nanorc

über lessIch schlage vor , einen Blick auf geben dieser Seite

lese
quelle
0

Entsprechend dem Vorschlag von Stéphane Chazelashighlight erstelle ich eine Bash-Funktion, um show Syntax highlight zu verwenden und in .bashrc oder so weiter zu schreiben. Es funktioniert großartig, schnell und effektiv.

s(){ highlight --force -O ansi $1 | /usr/bin/less -R; }

Hervorheben des Syntaxformats für die Unterstützung von 202 Sprachen . sehen highlight --list-scripts=langs.

utopischer Ausdruck
quelle
0

Sie können das Paket e2ansi verwenden , das Unterstützung für Syntaxhervorhebungen für Pager wie moreund bietet less.

Das Paket verwendet die Mutter aller Texteditoren, Emacs , um die eigentliche Syntaxhervorhebung durchzuführen. Als zusätzlichen Bonus werden auch alle anderen Konvertierungen durchgeführt, die normalerweise von Emacs ausgeführt werden - wie das Dekomprimieren von Dateien.

Beispiel

Das Folgende ist das Ergebnis des Anzeigens einer Datei mit lessund e2ansi:

Beispiel

Aufbau

Das Paket enthält ein Befehlszeilentool e2ansi-cat, mit dem Emacs im Batch-Modus gestartet, Dateien geöffnet, syntaktisch hervorgehoben und das Ergebnis mithilfe von ANSI-Sequenzen gerendert werden kann.

Sie können dies integrieren, lessindem Sie beispielsweise die folgenden Variablen auf setzen (der Speicherort Ihrer Init-Datei kann variieren):

export "LESSOPEN=||-/usr/local/emacs --batch -Q -l ~/.emacs -l bin/e2ansi-cat %s"
export "LESS=-r"
alias "more=less -X -E"

In der obigen Konfiguration wird lessder ursprüngliche Inhalt des Terminalfensters wiederhergestellt, während morenach der Eingabeaufforderung einfach neuer Inhalt ausgegeben wird.

Hinweis: Wenn Sie eine alte Version von verwenden less, unterstützt diese möglicherweise weder ||die -Syntax noch die Syntax. In diesem Fall müssen Sie sie möglicherweise einfach verwenden LESSOPEN=|/usr/local/emacs ....

Verwendung lessin Rohren

Das Zeichen "-" in LESSOPENgibt an, dass der Eingabefilter auch beim Einfügen von Text verwendet werden soll less. In diesem Fall kann sich Emacs nur auf Text selbst (und nicht auf einen Dateinamen) verlassen. Glücklicherweise bietet Emacs hierfür ein System an. Darüber hinaus werden durch die bereitgestellte Dateidatei e2ansi-magic.elzusätzliche Dateitypen eingerichtet. Zum Beispiel:

Rohrbeispiel

Warum Emacs benutzen?

  • Emacs unterstützt praktisch alle Programmiersprachen und strukturierten Textformate. In den meisten Fällen ist die Syntax-Hervorhebungsunterstützung hervorragend.
  • Sie können problemlos Unterstützung für weitere Sprachen und Formate hinzufügen oder vorhandene Pakete an Ihre Bedürfnisse anpassen.
  • Emacs unterstützen Farbthemen. Bei der Verwendung e2ansibleiben die Farben im Design erhalten, wenn eine Datei in angezeigt wird less. Sie können ein geeignetes Farbthema aus einer Reihe von Quellen auswählen oder Ihr eigenes entwerfen.
  • Wenn Sie Emacs als Editor Ihrer Wahl verwenden, erhalten Sie im Editor dieselbe Hervorhebung wie beim Anzeigen einer Datei mit less(abzüglich der Einschränkungen im ANSI-Sequenzformat und im Terminalfenster).
  • lesswird die Emacs-Funktionen nutzen, die eine automatische Konvertierung durchführen, zum Beispiel das Dekomprimieren von Dateien. Tatsächlich können Sie Emacs beibringen, jede Art von Konvertierung durchzuführen, beispielsweise die automatische Konvertierung einer Binärdatei in eine für Menschen lesbare Form mithilfe eines externen Tools.
  • Sie können Dateien anzeigen, die sich auf anderen Computern befinden, indem Sie die Emacs-Syntax für den Remotezugriff verwenden /USER@HOST:FILENAME.

Nützliche Links

Hinweise zum Betriebssystem

  • Unter MS Windows unterstützt die Konsole keine ANSI-Sequenzen. Glücklicherweise kann die lessAnwendung sie rendern. Mir ist keine aktuelle Binärdistribution von lessfür MS Windows bekannt, und die bereitgestellten Build-Dateien sind schwer zu verwenden. Glücklicherweise ist das Erstellen lessmit CMake einfach. Weitere Informationen finden Sie in diesem Text .

  • OS X vertreibt eine alte Version von less. Glücklicherweise ist es einfach, eine moderne Version direkt aus dem Quellcode zu erstellen.

Lindydancer
quelle
-2

Dies wird als Syntaxhervorhebung bezeichnet.

GNU Source-Highlight erzeugt bei Angabe einer Quelldatei ein Dokument mit Syntaxhervorhebung.

Ich verwende das folgende lessfilterSkript, oder Sie können lesses automatisch aufrufen lassen, wie mit:

export LESSOPEN="| /path/to/lessfilter %s"
export LESS=' -R '

Ich habe diesen Artikel gefunden und so angefangen:

#!/bin/sh
file -b -L "$1" | grep -q text &&
  /usr/share/source-highlight/src-hilite-lesspipe.sh "$1"

( src-hilite-lesspipe.shwird mitgeliefert, ist source-highlightaber nicht in allen Distributionen enthalten)

mtelesha
quelle
4
"Wenn Sie zu dem Artikel gehen, muss der Autor einen Mac verwenden, da er für seine Befehle Großbuchstaben verwendet": Ich fürchte, Sie sind ein bisschen verwirrt: Sie sind sich offensichtlich nicht bewusst, dass exporteine Umgebungsvariable definiert wird, kein Alias. Der Befehl less verwendet Flags aus der Umgebungsvariablen LESS, sodass Ihre Antwort einige Arbeit erfordert.
Alexis