Syntaxhervorhebung über Less

133

Gibt es eine Möglichkeit, eine in Less angezeigte Datei syntaktisch hervorzuheben?

Eigentlich benutze ich diesen Befehl, um eine XML-Datei (und manchmal eine Reihe von ihnen) zu öffnen.

less htmleditors/htmleditors_config.xml

oder

less [multiple files]

Ich möchte in Less bleiben (um dieses Programm besser zu lernen und mein Wissen über: n und: p für die nächste / vorherige Navigation zu nutzen)

Sie möchte aber auch eine Art grundlegende Syntaxhervorhebung - zumindest die Kommentare anders anzeigen. Kennen Sie eine Möglichkeit, dies zu tun?

Jesper Rønn-Jensen
quelle

Antworten:

123

Sie können das Quell-Highlight von GNU wie hier gezeigt verwenden (Pfad kann abweichen, siehe unten):

 export LESSOPEN="| /usr/bin/src-hilite-lesspipe.sh %s"
 export LESS=' -R '

Seit Debian Stretch und Fedora 25 unterscheiden sich Paketnamen und Skriptpfade

  • Debian:

    sudo apt install libsource-highlight-common source-highlight
    dpkg -L libsource-highlight-common | grep lesspipe
    # /usr/share/source-highlight/src-hilite-lesspipe.sh
    
  • Fedora:

    sudo dnf install source-highlight
    rpm -ql source-highlight | grep lesspipe
    # /usr/bin/source-highlight/src-hilite-lesspipe.sh
    
brandstaetter
quelle
Beim Ausführen wird die folgende Fehlermeldung angezeigt less ~/.zshrc. Fehler: src-hilite-lesspipe.sh: line 9: source-highlight: command not found. Ich führe das unter MacOSX aus.
JJD,
2
@JJD Hast du source-highlight installiert?
Max Nanasy
13
OSX: brew install source-highlight; export LESSOPEN="| /usr/local/bin/src-hilite-lesspipe.sh %s". Beachten Sie die Pfadänderung.
Gregg Lind
23
Auf Debian: sudo apt-get install source-highlight, export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s",export LESS=' -R '
Morgan Courbet
3
kleine Einschränkung: Quell-Highlight unterstützt derzeit kein Markdown.
Dhulihan
97

Das Beste aus beiden vorherigen Antworten: Sie können den Systemstandard-Editor in kürzerer Zeit aufrufen, indem Sie drücken v.

Mxx
quelle
3
Beeindruckend! Das ist unglaublich nützlich!
Dancek
13
Flüche, die Nano auf meiner Ubuntu-Box geöffnet haben!
Jamesc
5
Stellen Sie dann $ EDITOR oder $ VISUAL auf vim (oder emacs oder gedit oder joe oder ed oder mined oder ...).
Daniel H
@jamesc FYI, können Sie Syntax - Hervorhebung in Nano ermöglichen, hier ist wie.
Captain Man
@CaptainMan Nein, nein, nein! Ich ändere die Standardeinstellung zurück auf vim, wie Daniel H sagte! : D
Jamesc
33
pygmentize somefile.ex | less -R

oder

function cless () {
    pygmentize -f terminal "$1" | less -R
}

Pygementize ist Teil des Syntax-Highliters von Pygments Python .

Razvan Stefanescu
quelle
3
pygmentizefunktioniert auch mit den LESSOPENSachen, die in anderen Antworten hier erwähnt werden.
Nathan
2
Um pygmentize, müssen Sie Python und dann können Sie installieren pygmentizemit pip install pygments.
wkschwartz
3
Um lesszu verwenden , pygmentizefür die Syntaxhervorhebung Verwendung: which pygmentize 2> /dev/null >&2 && export LESSOPEN="| pygmentize -g -f terminal256 %s". -gdamit es mit Pipes funktioniert ( less <(diff -u file1 files)). Es ist in community/pygmentizePaketen für arch linuxund python-pygmentsfür verfügbar debian.
X-Yuri
Ich mag die Ausgabe von pygmentize, fand sie aber zu langsam. Ich habe diese Antwort gefunden, die schneller und immer noch hübsch in 256 Farben ist.
Tom Hale
16

Ich denke, dass Sie einen Texteditor verwenden sollten. Ich mag vim mich. Das gibt Ihnen viel Kraft beim Anzeigen von Dateien und wenn Sie sie dann bearbeiten möchten, kennen Sie bereits die Grundlagen.

Hier sind einige der Vorteile der Verwendung eines Texteditors (insbesondere von vim):

  • Satzstellung markieren
  • leistungsstarke bewegungsbefehle
  • finden
  • Zu einer bestimmten Stelle in einer Datei springen (als Markierung bezeichnet)
  • Falzen (nützlich, wenn Sie nur Funktionsstummel sehen möchten)

So öffnen Sie Ihre Datei im schreibgeschützten Modus:

vim -R <file name>

Hier ist eine grundlegende Navigationsanleitung:

j - move down one line
k - move up one line
h - left one char
l -right one char

ctrl-f - forward one page
ctrl-b - back one page

/<something> - search for something
n - next of whatever you searched for
N - next (search backwards) of whatever you searched for

:q - quit
:q! - quit without saving
:w - save

Hier ist ein Link für weitere Informationen:

http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html

Nur um es noch einmal zusammenzufassen, wenn Sie Unix vim verwenden, ist das ziemlich grundlegend. Ich habe gehört, dass das Lernen von vim wie das Lernen des Schreibens ist. Es ist das nächstnützlichste Werkzeug, das Sie zum Programmieren lernen können.

(Nur um Editor-Kriege zu vermeiden, könnte man sich auch Emacs oder einen anderen Editor ansehen, aber ich persönlich bevorzuge vim)

Sixtyfootersdude
quelle
1
Ich unterstütze das. Vim wird so schnell wie möglich gestartet und viele der Tastaturkürzel (z. B. Suche, nächste Seite, vorherige Seite) sind identisch.
Jeremy W. Sherman
10
Nur zu Ihrer Information, auf vielen Systemen, viewist ein Alias ​​für vim -R.
Andrew Ferrier
15

Wie andere gesagt haben, können Sie die Kraft von vim nutzen. Vor allem aber können Sie dies tun, ohne zu lernen, wie man vi / vim verwendet.

Vim wird mit einem less.vimSkript geliefert, das sich gut als Ersatz für weniger eignet und eine farbige Syntax hervorhebt. Es werden lessTastenkombinationen verwendet (zum Beenden einfach 'q' drücken).

Es gab ein paar Probleme, also habe ich es verbessert . Hier ist ein Screenshot von meinem Blog-Beitrag (archiviert am 09.04.2013; Original wirft 503):

Screenshot von https://github.com/huyz/less.vim

huyz
quelle
2
Genial! Aber als ich das Skript nicht finden konnte , sofort würde Ich mag den Befehl teilen es Ortung: find /usr/share/vim -name 'less.sh'die von diesem Kern genommen wird: gist.github.com/chauncey-garrett/9773770
nuala
Fügen Sie zu @ yoshis Kommentar hinzu, um schnell einen vimlessBefehl hinzuzufügen ( vimdiffln -s $(find /usr/share/vim -name 'less.sh') /usr/local/bin/vimless
gemäß
Der Link ist 404!
acgtyrant
@acgtyrant Sollte jetzt behoben sein; Das Internet-Archiv hat es zum Glück.
bb010g
10

Ich habe auch danach gesucht und mit Vim eine andere Lösung gefunden: http://ubuntu-tutorials.com/2008/07/14/use-vim-as-a-syntax-highlighting-pager/

Der Beitrag ist ziemlich alt, daher wird ab sofort in neueren Distributionen vim 7.2 ausgeliefert und die .bashrc lautet: alias vless = 'vim -u /usr/share/vim/vim72/macros/less.vim'

Lorenzo
quelle
1
MacVim wird mit einem Shell-Skript geliefert, das Sie direkt verwenden können. Es befindet sich unter: /Applications/MacVim.app/Contents/Resources/vim/runtime/macros/less.sh
Nick
1
Diese Funktion wird in Vim dokumentiert sich unter:help less
joeytwiddle
8

Ich bin froh, ein neues Paket, e2ansi , ankündigen zu können, das Syntax-Highlighting-Unterstützung 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, wird ||die -Syntax oder möglicherweise nicht unterstützt. 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 Syntaxhervorhebungsunterstü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 aus einer Reihe von Quellen ein geeignetes Farbthema auswählen oder ein 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
Für OS X würde ich empfehlen, den Paketmanager brew [ brew.sh/] mit brew dupes [ github.com/Homebrew/homebrew-dupes] zu verwenden, um aktuelle Versionen von Dingen wie zu installieren less.
Drevicko
"powered by emacs" - Laufen ganze VM nur um eine Datei anzuschauen? ;-) und +1
Alois Mahdal
6

Wenn Sie GNU Source-Highlight installiert haben, können Sie den folgenden Befehl verwenden, um die Syntax einer einzelnen Datei hervorzuheben:

$ src-hilite-lesspipe.sh yourfile.xml | less -R
Oliver
quelle
Kann src-hilite-lesspipe.shman Eingaben auch über eine Pipe empfangen?
Waldyrious
2

source-highlighthat ein .shSkript in /usr/share/source-highlight/*.sh. Ich habe einen symbolischen Link mit dem Namen hcatin erstellt /usr/bin.

Es zeigt hervorgehobene Ausgabe im Terminal (Konsole) - hcathervorgehobene Katze.

Wie man:

[me@this]<bash><~> 43 
21:23 Fri Apr 19 > sudo apt-get install source-highlight

[me@this]<bash><~> 28 
21:03 Fri Apr 19 > ll /usr/share/source-highlight/*.sh
-rwxr-xr-x 1 root root 432 May  1  2012 /usr/share/source-highlight/src-hilite-lesspipe.sh*

[me@this]<bash><~> 29 
21:04 Fri Apr 19 > sudo su
root@this:/home/me# cd /usr/bin/
root@this:/usr/bin# ln -s /usr/share/source-highlight/src-hilite-lesspipe.sh hcat

[me@this]<bash><~> 36 
21:07 Fri Apr 19 > hcat test.xml
Vitalie Ghelbert
quelle
2

Unter OS X 10.9 (Maverick) würde dies den Trick machen:

  • brew install source-highlight (Vorausgesetzt, brew ist installiert - http://brew.sh )
  • sudo nano /etc/launchd.conf

    setenv LESSOPEN="| /usr/local/bin/src-hilite-lesspipe.sh %s"     
    setenv LESS=' -R '
    

    (Zu /etc/launchd.conf hinzufügen)

  • neustarten

TeNGiL
quelle
0

In Mac kann man einfach tippen view filename, macht ähnliches wie weniger.

Alan Dong
quelle
1
Bei OSX wird view filenamenur vimstandardmäßig gestartet - etwas andere Tastenzuordnungen als bei less(weitere Details finden Sie in den Antworten auf diese Frage).
Drevicko
0

Nachdem ich GNU's Source-Highlight (Paket dev-util/source-highlightauf Sabayon / Gentoo) installiert hatte , konfigurierte ich diese Envs in /etc/bash/bashrc.d/my-less-src-highlight:

#default:    export LESSOPEN="|lesspipe %s"
#don't like: export LESSOPEN="| /usr/bin/src-hilite-lesspipe.sh %s"
#default:    export LESS=" -R -M --shift 5"
export LESSCOLOR=always
export LESSCOLORIZER=/usr/bin/src-hilite-lesspipe.sh

Ich wollte nicht ersetzen, lesspipeweil das andere Funktionen hat. Verkettung hat nicht funktioniert.

comonad
quelle
0

Wenn Sie dieselbe Syntaxhervorhebung verwenden möchten, die Sie in Vim verwenden , aus irgendeinem Grund jedoch lessals Pager bevorzugen , können Sie das folgende Skript verwenden: https://github.com/rkitover/vimpager

Die grundlegende Verwendung wäre:

vimpager file.txt

oder

vimcat file.ext | less -R

Mit können Sie -czusätzliche Befehle übergeben, die sich nicht in Ihrem .vimrcFarbschema befinden (z. B. Auswahl eines anderen Farbschemas). Der vollständige Befehl, den ich verwende, lautet:

vimcat -c 'set cmdheight=20' -c 'hi! clear Normal' -o - "$FILENAME" | less -REXS

Achtung: Wenn Ihr Vim Sie beim Start auffordert, die Eingabetaste zu drücken, wird die Eingabeaufforderung nicht angezeigt, es wird jedoch nichts geschehen, bis Sie die Eingabetaste drücken! Der cmdheightobige Trick kann dazu beitragen, das zu mildern.

joeytwiddle
quelle
0

Ich fand highlightwelche:

  • Unterstützt mehrere Farbschemata und 256 Farben
  • Funktioniert auf STDIN (im Gegensatz zu source-highlight)
  • Ist viel schneller als pygmentize

Bildschirmfoto

Hier ist ein Skript, das ich aufrufe und highlight-less-wrapperdas .bashrcAnweisungen zur Einrichtung lessfür die automatische Verwendung enthält.

#!/bin/bash

# Have highlight read from STDIN if '-' is given as filename

# Setup - Add to .bashrc:
# LESSOPEN='|-highlight-less-wrapper "%s"'
# export LESS=-FMRXis

# Usage:
# $ less file
# OR
# $ pipeline | less

warn () { printf "%s: %s\n" "$(basename "$0")" "$*" 1>&2; }
die () { warn "$@"; exit 1; }

# Argument checking
case $# in
    0)
        # Allow `exec $0` for less setup
        echo "LESSOPEN='|-$(readlink -f "$0") "'"%s"'\'
        exit 255 ;;
    1)
        # Only one argument is expected.
        # less will invoke multiple times given multiple files.
        file=$1
        if [[ $file != - && ! -r $file ]]; then  # less passes '-' for STDIN
            die "Cannot open $file for reading"
        fi ;;
    *)
        die "Expected only one argument" ;;
esac

# Run highlight
# highlight will read from STDIN when given a null filename
run_highlight () {
    highlight --force -O truecolor --style aiseered "$1"
}

if [[ $file == - ]]; then  # Run on stdin
    run_highlight ""
else
    run_highlight "$file"
fi
Tom Hale
quelle
"Da Github nun Teil der Mordor Corp ist, hat sich das Highlight Git Repo verschoben." War interessiert, aber es sind nicht mehr die 90er Jahre, in denen Entwickler aufwachsen müssen.
Urda
0

Ich hatte die gleiche Frage und landete, hörte, las alle Antworten und das Folgende tat ich schließlich, um die Syntax jedes Mal hervorzuheben, wenn ich lessoder benutze most:

sudo apt install source-highlight

Dann habe ich einen Alias ​​für mein lessund erstellt most(ich verwende ZSH, aber Sie können Aliase für Ihre .bashrcDatei hinzufügen, wenn Sie bash verwenden):

vim ~/.zshrc

( Für diejenigen , die in vim stecken bekommen könnte: Drücken Sie igehen in den Bearbeitungsmodus, wenn Sie drücken fertig sind Escdann :dann xund schließlich Enterdie Änderungen zu speichern )

Fügen Sie die folgenden Zeilen für Debian-basierte Distributionen (wie Debian, Ubuntu, Mint usw.) ein:

alias most='AliasFuncLess() { unset -f AliasFuncLess; $(dpkg -L libsource-highlight-common | grep lesspipe) "$1" | less -R };AliasFuncLess'
alias most='AliasFuncMost() { unset -f AliasFuncMost; $(dpkg -L libsource-highlight-common | grep lesspipe) "$1" | most };AliasFuncMost'

oder für RPM-Distributionen (Redhat, Fedora, Centos):

alias most='AliasFuncLess() { unset -f AliasFuncLess; $(rpm -ql source-highlight | grep lesspipe) "$1" | less -R };AliasFuncLess'
alias most='AliasFuncMost() { unset -f AliasFuncMost; $(rpm -ql source-highlight | grep lesspipe) "$1" | most };AliasFuncMost'

Denken Sie daran , das Terminal zu schließen und erneut zu öffnen, um sicherzustellen, dass ein Alias ​​erstellt wurde.

Jetzt können Sie die Farben genießen:

most yourFile.xml
Mehrad Mahmoudian
quelle