Jak podświetlić składnię za pomocą Less


133

czy istnieje sposób na wyróżnienie składni pliku, który widzę w Less?

faktycznie używam tego polecenia, aby otworzyć plik XML (a czasem ich serię)

less htmleditors/htmleditors_config.xml

lub

less [multiple files]

Chciałbym zostać w Less (aby lepiej nauczyć się tego programu i wykorzystać moją wiedzę na temat: n oraz: p do następnej / poprzedniej nawigacji)

Ale chce też jakiegoś podstawowego podświetlenia składni - przynajmniej pokaż komentarze inaczej. Czy wiesz jak to zrobić?

Odpowiedzi:


123

Możesz użyć podświetlenia źródła GNU , jak pokazano tutaj (ścieżka może się różnić, patrz poniżej):

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

Począwszy od Debian Stretch i Fedory 25, nazwy pakietów i ścieżki skryptów są różne

  • 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
    

Po uruchomieniu otrzymuję następujący komunikat o błędzie less ~/.zshrc. Błąd: src-hilite-lesspipe.sh: line 9: source-highlight: command not found. Uruchomię to na MacOSX.
JJD

2
@JJD Czy zainstalowałeś wyróżnienie źródła?
Max Nanasy

13
OSX: brew install source-highlight; export LESSOPEN="| /usr/local/bin/src-hilite-lesspipe.sh %s". Zwróć uwagę na zmianę ścieżki.
Gregg Lind

23
Na Debianie: sudo apt-get install source-highlight, export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s",export LESS=' -R '
Morgan Courbet

3
małe zastrzeżenie: podświetlanie źródła obecnie nie obsługuje markdown.
dhulihan

97

Najlepsze z obu poprzednich odpowiedzi: możesz wywołać domyślny edytor systemu z mniejszej odległości, naciskając v.


3
Łał! Jest to niezwykle przydatne!
dancek

13
Klątwy, które otworzyły Nano na moim pudełku Ubuntu!
jamesc

5
Następnie ustaw $ EDITOR lub $ VISUAL na vim (lub emacs, gedit, joe, ed lub mined lub…).
Daniel H

@jamesc FYI, możesz włączyć podświetlanie składni w Nano, oto jak to zrobić .
Kapitan Man

@CaptainMan Nope nope nope! Zmieniam domyślne z powrotem na vim, jak powiedział Daniel H. : D
Jamesc

33
pygmentize somefile.ex | less -R

lub

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

Pygmentize jest częścią highlitera składni Pygments Python .


3
pygmentizedziała również z LESSOPENmateriałami wymienionymi w innych odpowiedziach tutaj.
Nathan

2
Aby uzyskać pygmentize, potrzebujesz Pythona, a następnie możesz zainstalować za pygmentizepomocą pip install pygments.
wkschwartz

3
Aby dostać się lessdo wykorzystania pygmentizedo użycia składni wyróżnienia: which pygmentize 2> /dev/null >&2 && export LESSOPEN="| pygmentize -g -f terminal256 %s". -gaby działał z potokami ( less <(diff -u file1 files)). Jest dostępny w community/pygmentizepakiecie dla arch linuxi python-pygmentsdla debian.
x-yuri

Lubię wyjście pygmentize, ale uznałem , że jest zbyt wolne. Wymyśliłem tę odpowiedź, która jest szybsza i wciąż ma 256 kolorów.
Tom Hale,

16

Myślę, że powinieneś użyć edytora tekstu. Lubię siebie. Daje to WIELE MOCY podczas przeglądania plików, a kiedy chcesz je edytować, znasz już podstawy.

Oto niektóre zalety korzystania z edytora tekstu (szczególnie vim):

  • Podświetlanie składni
  • potężne polecenia ruchu
  • odnaleźć
  • przeskocz do określonej lokalizacji w pliku (zwanej znakiem)
  • składanie (przydatne, gdy chcesz tylko zobaczyć kody pośredniczące funkcji)

Aby otworzyć plik w trybie tylko do odczytu, użyj tego:

vim -R <file name>

Oto podstawowy przewodnik nawigacyjny:

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

Oto link, aby uzyskać więcej informacji:

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

Podsumowując, jeśli użyjesz uniksowego vima, jest to dość fundamentalne. Słyszałem, że nauka vim jest jak nauka pisania. Jest to kolejne najbardziej przydatne narzędzie, którego możesz nauczyć się programować.

(Aby uniknąć wojen edytorskich, możesz również zajrzeć do emacsa lub innego edytora, ale ja osobiście wolę vim)


1
Popieram to. Vim uruchamia się tak szybko, jak mniej, a wiele skrótów klawiaturowych (np. Wyszukiwanie, następna strona, poprzednia strona) jest identycznych.
Jeremy W. Sherman,

10
Just FYI, na wielu systemach, viewjest pseudonimem vim -R.
Andrew Ferrier,

15

Jak powiedzieli inni, możesz użyć mocy vima. Ale co ważne, możesz to zrobić bez uczenia się korzystania z vi / vim.

Vim jest wyposażony w less.vimskrypt, który działa całkiem dobrze jako zamiennik mniejszego, z podświetlaniem składni w pełnym kolorze. Używa lessskrótów klawiszowych (wystarczy nacisnąć „q”, aby wyjść).

Miał kilka problemów, więc go poprawiłem . Oto zrzut ekranu z mojego postu na blogu (zarchiwizowany 2013-04-09; oryginał rzuca 503):

zrzut ekranu https://github.com/huyz/less.vim


2
Niesamowite! Ale jak nie mógł znaleźć scenariusz od razu chciałbym podzielić polecenia dla lokalizowania go: find /usr/share/vim -name 'less.sh'który pochodzi z tego GIST: gist.github.com/chauncey-garrett/9773770
Nuala

Dodając do komentarza @ yoshi, aby szybko dodać vimlesspolecenie (zgodnie z nomenklaturą vimdiff), wykonaj:ln -s $(find /usr/share/vim -name 'less.sh') /usr/local/bin/vimless
waldyrious,

Link to 404!
acgtyrant

@ acgtyrant Powinien zostać teraz naprawiony; archiwum internetowe ma to na szczęście.
bb010g

10

Szukałem tego i znalazłem inne rozwiązanie za pomocą Vima: http://ubuntu-tutorials.com/2008/07/14/use-vim-as-a-syntax-highlighting-pager/

Post jest raczej stary, więc teraz na nowszych dystrybucjach vim 7.2 jest wysyłany, a .bashrc będzie czytać: alias vless = 'vim -u /usr/share/vim/vim72/macros/less.vim'


1
MacVim jest wyposażony w skrypt powłoki, z którego można korzystać bezpośrednio, znajdujący się w: /Applications/MacVim.app/Contents/Resources/vim/runtime/macros/less.sh
Nick

1
Ta funkcja jest udokumentowana w samym Vimie pod:help less
joeytwiddle

8

Z przyjemnością ogłaszam nowy pakiet e2ansi , który zapewnia obsługę podświetlania składni dla pagerów takich jak morei less.

Pakiet wykorzystuje matkę wszystkich edytorów tekstu, Emacsa , do faktycznego podświetlania składni. Jako dodatkowy bonus, wykonywane są również wszystkie inne konwersje normalnie wykonywane przez Emacsa - takie jak rozpakowywanie plików.

Przykład

Poniżej przedstawiono wynik przeglądania pliku przy użyciu lessi e2ansi:

Przykład

Konfiguracja

Pakiet zapewnia narzędzie wiersza polecenia, e2ansi-catktóre uruchamia Emacsa w trybie wsadowym, otwiera pliki, zaznacza ich składnię i renderuje wynik przy użyciu sekwencji ANSI.

Możesz to zintegrować less, ustawiając na przykład następujące zmienne (lokalizacja pliku inicjującego może się różnić):

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

W powyższej konfiguracji lessprzywraca oryginalną zawartość okna terminala, a morepo wyświetleniu monitu wypisuje nową zawartość.

Uwaga: jeśli używasz starej wersji less, może ona nie obsługiwać składni ||lub -, w takim przypadku może być konieczne użycie po prostu LESSOPEN=|/usr/local/emacs ....

Zastosowanie lessw rurach

Znak „-” w LESSOPENoznacza, że ​​filtr wejściowy powinien być również używany podczas przesyłania tekstu do niego less. W takim przypadku Emacs może polegać tylko na samym tekście (a nie na nazwie pliku). Na szczęście Emacs zapewnia do tego system. Ponadto podany plik pliku e2ansi-magic.elkonfiguruje dodatkowe typy plików. Na przykład:

Przykład rury

Dlaczego warto korzystać z Emacsa?

  • Emacs obsługuje praktycznie wszystkie języki programowania i formaty tekstu strukturalnego. W większości przypadków obsługa wyróżniania składni jest doskonała.
  • Możesz łatwo dodać obsługę większej liczby języków i formatów lub zmodyfikować istniejące pakiety zgodnie z własnymi potrzebami.
  • Emacs obsługuje kolorowe motywy. Podczas używania e2ansikolory w kompozycji są zachowywane podczas przeglądania pliku w less. Możesz wybrać odpowiedni motyw kolorystyczny z wielu źródeł lub zaprojektować własny.
  • Jeśli użyjesz Emacsa jako swojego edytora, dostaniesz to samo wyróżnienie w edytorze, co podczas przeglądania pliku przy użyciu less(minus ograniczenia w formacie sekwencji ANSI i oknie terminala).
  • lessskorzysta z funkcji Emacsa, które wykonują automatyczną konwersję, na przykład rozpakowywanie plików. W rzeczywistości możesz nauczyć Emacsa przeprowadzania wszelkiego rodzaju konwersji, takich jak automatyczna konwersja pliku binarnego do postaci czytelnej dla człowieka za pomocą zewnętrznego narzędzia.
  • Możesz przeglądać pliki znajdujące się na innych komputerach, używając składni Emacsa do zdalnego dostępu, np /USER@HOST:FILENAME.

Przydatne linki

  • e2ansijest dystrybuowany na Melpa i może być zainstalowany przy użyciu standardowego systemu pakietów Emacsa
  • e2ansijest hostowany na GitHub
  • e2ansiStronę na Emacs Wiki
  • Domem less.

Uwagi dotyczące systemu operacyjnego

  • W systemie MS Windows konsola nie obsługuje natywnie sekwencji ANSI. Na szczęście lessaplikacja jest w stanie je renderować. Nie znam żadnej współczesnej dystrybucji binarnej lessdla MS Windows, a dostarczone pliki kompilacji są trudne w użyciu. Na szczęście jest łatwy do zbudowania lessprzy użyciu CMake , zobacz ten tekst, aby uzyskać szczegółowe informacje.

  • OS X rozpowszechnia starą wersję less. Na szczęście łatwo jest zbudować nowoczesną wersję bezpośrednio ze źródła.


W przypadku systemu OS X polecam użycie menedżera pakietów brew [ brew.sh/] z duplikami brew [ github.com/Homebrew/homebrew-dupes] do zainstalowania aktualnych wersji takich rzeczy less.
drevicko

„powered by emacs” - uruchamiasz całą maszynę wirtualną tylko po to, aby spojrzeć na plik? ;-) i +1
Alois Mahdal

6

Jeśli masz zainstalowany GNU Source-highlight , możesz użyć następującego polecenia, aby podświetlić składnię pojedynczego pliku:

$ src-hilite-lesspipe.sh yourfile.xml | less -R

Czy można również src-hilite-lesspipe.shodbierać dane wejściowe za pośrednictwem potoku?
waldyrious

2

source-highlightma .shskrypt w /usr/share/source-highlight/*.sh. Stworzyłem symboliczny link do niego z nazwą hcatw /usr/bin.

Pokazuje podświetlone wyjście w terminalu (konsoli) - hcatwyróżniony jest cat.

Jak:

[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

2

Używając OS X 10.9 (Maverick) załatwi sprawę:

  • brew install source-highlight (Zakładając, że napar jest zainstalowany - http://brew.sh )
  • sudo nano /etc/launchd.conf

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

    (Dodaj do /etc/launchd.conf)

  • restart


0

W Macu możesz po prostu pisać view filename, robi podobne rzeczy jak mniej.


1
W OSX view filenamepo prostu uruchamia vimsię domyślnie - nieco inne powiązania klawiszy z less(więcej informacji można znaleźć w innych odpowiedziach na to pytanie).
drevicko

0

Po zainstalowaniu GNU source-highlight (pakiet dev-util/source-highlightna sabayon / gentoo) skonfigurowałem te środowiska w /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

Nie podobało mi się to, lesspipeponieważ ma inne funkcje. Łączenie nie działało.


0

Jeśli chcesz tego samego podświetlania składni, którego używasz w Vimie , ale z jakiegoś powodu wolisz używać go lessjako pagera, możesz użyć tego skryptu: https://github.com/rkitover/vimpager

Podstawowym zastosowaniem byłoby:

vimpager file.txt

lub

vimcat file.ext | less -R

Możesz użyć -cdo przekazania dodatkowych poleceń, których nie ma w twoim .vimrc(np. Wybranie innego schematu kolorów). Pełne polecenie, którego używam to:

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

Uwaga: jeśli Twój Vim poprosi cię o naciśnięcie Enter podczas uruchamiania, nie zobaczysz monitu, ale nic się nie wydarzy, dopóki nie naciśniesz Enter! Powyższa cmdheightsztuczka może pomóc w złagodzeniu tego.


0

Znalazłem highlightktóre:

  • Obsługuje wiele schematów kolorów i 256 kolorów
  • Działa na STDIN (w przeciwieństwie do source-highlight)
  • Jest znacznie szybszy niż pygmentize

Zrzut ekranu

Oto skrypt, highlight-less-wrapperktóry wywołuję, który zawiera .bashrcinstrukcje, jak skonfigurować lessautomatyczne korzystanie z niego.

#!/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

„Ponieważ Github jest teraz częścią Mordor Corp, najważniejsze wydarzenie Git ruszyło” Był zainteresowany, ale cmon, to już nie lata 90. Devs muszą już dorosnąć.
Urda

0

Miałem to samo pytanie i usłyszałem, przeczytałem wszystkie odpowiedzi, a oto, co w końcu zrobiłem, aby wyróżniać składnię za każdym razem, gdy używam lesslub most:

sudo apt install source-highlight

Potem poszedłem i stworzyłem alias dla mojego lessi most(używam ZSH, ale możesz dodać aliasy dla swojego .bashrcpliku, jeśli używasz bash):

vim ~/.zshrc

( Dla tych, którzy mogą utknąć w vimie: naciśnij, iaby przejść do trybu edycji, a kiedy skończysz, naciśnij, Esca :następnie, xa na końcu, Enteraby zapisać zmiany )

I wklej następujące wiersze dla dystrybucji opartych na Debianie (takich jak Debian, Ubuntu, Mint itp.):

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'

lub dla dystrybucji RPM (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'

Pamiętaj, aby zamknąć terminal i otworzyć go ponownie, aby upewnić się, że utworzono alias.

Teraz możesz cieszyć się kolorami:

most yourFile.xml
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.