Podświetlanie składni w terminalu

43

Wiele edytorów programistycznych pokoloruje kod źródłowy. Czy istnieje polecenie, które pokoloruje kod źródłowy do przeglądania w terminalu?

Mogę otworzyć plik emacs -nw(który otwiera się w terminalu, a nie pojawiały się w nowym oknie), ale szukam czegoś, co działa podobnie less(lub prace z less -R , która przechodzi przez sekwencje kolorów ewakuacyjnych w wejściu).

Alexis
źródło

Odpowiedzi:

66

Z highlightna terminalu, który obsługuje te same sekwencje specjalne koloru, jak xterm:

highlight -O xterm256 your-file | less -R

Z ruby-rouge:

rougify your-file | less -R

Z python-pygments:

pygmentize your-file | less -R

Z GNUsource-highlight :

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

Możesz także użyć vimjako pager za pomocą macros/less.shskryptu dostarczonego z vim(szczegóły :h lessznajdują się vimw środku):

W moim systemie:

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

Lub możesz użyć dowolnego zakreślacza składni, który obsługuje wyjście HTML i używa elinkslub w3mjako pager (lub elinks -dump -dump-color-mode 3 | less -R) jak w GNUsource-highlight :

source-highlight -o STDOUT -i your-file | elinks -dump -dump-color-mode 3 | less -R
Stéphane Chazelas
źródło
Highlight może konwertować tekst na SVG / HTML, co jest bardzo ekscytujące.
utopic eexpress
14

GNU używać source-highlightw połączeniu z less -Rtego. Dodaj następujące wiersze do pliku inicjalizacji powłoki ( ~/.bashrcna przykład):

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

Powinno to automatycznie pokolorować kod źródłowy zgodnie z użytym językiem, a jeśli nie, uruchomi się lessna jego wejściu bezpośrednio.

terdon
źródło
6

Jeśli interesują Cię kolory lessbardziej ogólnie, możesz rzucić okiem lesspipe.sh. Zobacz na przykład http://freecode.com/projects/lesspipe .

lesspipe.sh to filtr wejściowy dla pagera mniej, jak opisano na stronie podręcznika less. Skrypt działa pod powłoką kompatybilną z ksh (np. Bash, zsh) i pozwala mniej używać do przeglądania plików z zawartością binarną, plikami skompresowanymi, archiwami i plikami zawartymi w archiwach.

Pokoloruje również skrypty powłoki, skrypty Perla itp. Podobnie jak edytor tekstowy, ale bez użycia programu do wstępnego przetwarzania do pokolorowania.

DaveEmme
źródło
Dzięki! Myślę, że lesspipe.shto właśnie próbowałem zapamiętać, zanim opublikowałem pytanie ...
Alex
2

Lubię prostotę i używam nano edytora tekstu, w tym przypadku zwykle postępuję następująco:

sprawdź, czy podświetlona składnia jest dostępna: ls -la /usr/share/nano/

dołącz to do mojego pliku nanorc za pomocą następującego polecenia lub wykonując to ręcznie

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

o lessSugeruję zajrzeć na tę stronę

lese
źródło
0

Zgodnie z sugestią Stéphane'a Chazelasa , wykonuję funkcję bash, aby użyć highlightpodświetlenia show Syntax, umieścić go w .bashrc lub tak dalej. Działa świetnie, szybko i skutecznie.

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

obsługa podświetlania Format składni języka 202 . zob highlight --list-scripts=langs.

utopic eexpress
źródło
0

Możesz użyć pakietu 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 zawiera narzędzie wiersza polecenia, e2ansi-catktóre uruchamia Emacsa w trybie wsadowym, otwiera pliki, wyróżnia 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 na (położenie pliku init 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.

Lindydancer
źródło
-2

Nazywa się to podświetlaniem składni.

Podświetlenie źródła GNU po otrzymaniu pliku źródłowego tworzy dokument z podświetlaniem składni.

Korzystam ze lessfilterskryptu poniżej lub możesz lesswywołać go automatycznie tak jak w przypadku:

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

Znalazłem ten artykuł i zacząłem robić to w ten sposób:

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

( src-hilite-lesspipe.shjest dostarczany z, source-highlightale nie wszystkie dystrybucje go obejmują)

mtelesha
źródło
4
„Jeśli przejdziesz do artykułu, autor musi używać komputera Mac, ponieważ używa on wielkich liter do swoich poleceń”: Obawiam się, że jesteś trochę zdezorientowany: najwyraźniej nie wiesz, że exportdefiniuje zmienną środowiskową, a nie alias. Komenda less używa flagi ze zmiennej środowiskowej LESS, więc odpowiedź wymaga jeszcze trochę pracy.
Alexis