Подсветка синтаксиса в терминале

43

Многие редакторы, ориентированные на программирование, раскрасят исходный код. Есть ли команда, которая раскрасит исходный код для просмотра в терминале?

Я мог бы открыть файл с помощью emacs -nw(который открывается в терминале вместо того, чтобы открывать новое окно), но я ищу что-то, что работает как less(или работает с less -R , который проходит через escape-последовательности цвета при вводе).

Alexis
источник

Ответы:

66

На highlightтерминале, который поддерживает те же последовательности выхода цвета, что и xterm:

highlight -O xterm256 your-file | less -R

С ruby-rouge:

rougify your-file | less -R

С python-pygments:

pygmentize your-file | less -R

С GNUsource-highlight :

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

Вы можете также использовать в vimкачестве пейджера с помощью macros/less.shсценария поставляется с vim(см :h lessвнутри vimподробности):

В моей системе:

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

Или вы можете использовать любой из подсветки синтаксиса, который поддерживает вывод и использование HTML, elinksили w3mкак пейджер (или elinks -dump -dump-color-mode 3 | less -R), как в GNUsource-highlight :

source-highlight -o STDOUT -i your-file | elinks -dump -dump-color-mode 3 | less -R
Стефан Шазелас
источник
Highlight может конвертировать текст в SVG / HTML, что очень интересно.
Утопический Экспресс
14

Я использую GNU в source-highlightсочетании с less -Rэтим. Добавьте следующие строки в файл инициализации вашей оболочки ( ~/.bashrcнапример):

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

Это должно автоматически раскрасить исходный код в соответствии с используемым языком и, если это не удастся, он запустится lessнепосредственно при вводе.

Тердон
источник
6

Если вам интересны цвета в lessболее общем плане, вы можете посмотреть на них lesspipe.sh. Смотрите, например, http://freecode.com/projects/lesspipe .

lesspipe.sh является входным фильтром для пейджера less, как описано в справочной странице less. Сценарий запускается в ksh-совместимой оболочке (например, bash, zsh) и позволяет использовать меньше для просмотра файлов с двоичным содержимым, сжатых файлов, архивов и файлов, содержащихся в архивах.

Он также раскрасит сценарии оболочки, Perl-скрипты и т. Д. Аналогично текстовому редактору, но без использования какой-либо программы «предварительной обработки» для раскрашивания.

DaveEmme
источник
Благодарность! Я думаю, lesspipe.shэто то, что я пытался вспомнить, прежде чем опубликовать вопрос ...
alexis
2

Мне нравится простота, и я использую текстовый редактор nano, в этом случае я обычно действую следующим образом:

проверьте наличие синтаксиса ведьмы: ls -la /usr/share/nano/

включить его в мой файл nanorc с помощью следующей команды или вручную

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

о lessя предлагаю посмотреть на этой странице

оскорбление
источник
0

Согласно предложению Стефана Шазела , я создаю функцию bash, чтобы использовать highlightподсветку show Syntax, помещаю ее в .bashrc или так далее. Работает отлично, быстро и эффективно.

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

выделить поддержку 202 языковой формат синтаксиса . см highlight --list-scripts=langs.

утопический экспресс
источник
0

Вы можете использовать пакет e2ansi , который обеспечивает поддержку подсветки синтаксиса для пейджеров, таких как moreи less.

Пакет использует мать всех текстовых редакторов, Emacs , для фактической подсветки синтаксиса. В качестве дополнительного бонуса также выполняются все другие преобразования, обычно выполняемые Emacs, такие как распаковка файлов.

пример

Ниже приведен результат просмотра файла с использованием lessи e2ansi:

пример

конфигурация

Пакет предоставляет инструмент командной строки, e2ansi-catкоторый запускает Emacs в пакетном режиме, открывает файлы, выделяет их синтаксис и отображает результат с использованием последовательностей ANSI.

Вы можете интегрировать это less, установив, например, следующие переменные (расположение вашего файла инициализации может отличаться):

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

В приведенной выше конфигурации lessвосстанавливает исходное содержимое окна терминала, тогда как moreпросто выводит новое содержимое после запроса.

Примечание. Если вы используете старую версию less, она может не поддерживать синтаксис ||или -, в этом случае вам может понадобиться просто использовать LESSOPEN=|/usr/local/emacs ....

Использование lessв трубах

Символ «-» LESSOPENуказывает на то, что фильтр ввода также должен использоваться при передаче текста в less. В этом случае Emacs может полагаться только на сам текст (а не на имя файла). К счастью, Emacs предоставляет систему для этого. Кроме того, предоставленный файл файла e2ansi-magic.elустанавливает дополнительные типы файлов. Например:

Пример трубы

Зачем использовать Emacs?

  • Emacs поддерживает практически все языки программирования и форматы структурированного текста. В большинстве случаев поддержка подсветки синтаксиса превосходна.
  • Вы можете легко добавить поддержку большего количества языков и форматов или изменить существующие пакеты в соответствии с вашими потребностями.
  • Emacs поддерживает цветовые темы. При использовании e2ansiцвета в теме сохраняются при просмотре файла в less. Вы можете выбрать подходящую цветовую тему из нескольких источников или создать свой собственный.
  • Если вы используете Emacs в качестве вашего предпочтительного редактора, вы получите ту же подсветку в редакторе, что и при просмотре файла с использованием less(минус ограничения в формате последовательности ANSI и окне терминала).
  • lessиспользует возможности Emacs, которые выполняют автоматическое преобразование, например, распаковку файлов. Фактически, вы можете научить Emacs выполнять любые преобразования, такие как автоматическое преобразование двоичного файла в читаемую человеком форму с помощью внешнего инструмента.
  • Вы можете просматривать файлы, расположенные на других машинах, используя синтаксис Emacs для удаленного доступа, например /USER@HOST:FILENAME.

Полезные ссылки

  • e2ansiраспространяется на Melpa и может быть установлен с использованием стандартной системы пакетов Emacs
  • e2ansiразмещен на GitHub
  • e2ansiСтраница на Emacs Wiki
  • Дом less.

Примечания по операционной системе

  • В MS Windows консоль не поддерживает последовательности ANSI. К счастью, lessприложение способно их визуализировать. Я не знаю ни одного современного бинарного дистрибутива lessдля MS Windows, и предоставленные файлы сборки сложно использовать. К счастью, это легко построить lessс помощью CMake , подробности смотрите в этом тексте .

  • OS X распространяет древнюю версию less. К счастью, современную версию легко создать прямо из исходного кода.

Lindydancer
источник
-2

Это называется подсветкой синтаксиса.

GNU Source-highlight, когда предоставляется исходный файл, создает документ с подсветкой синтаксиса.

Я использую приведенный lessfilterниже скрипт, или вы можете lessавтоматически вызывать его, например:

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

Я нашел эту статью и начал делать это так:

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

( src-hilite-lesspipe.shпоставляется с, source-highlightно не все дистрибутивы включают его)

mtelesha
источник
4
«Если вы перейдете к статье, автор должен использовать Mac, поскольку он использует заглавные буквы для своих команд»: боюсь, вы немного запутались: очевидно, вы не знаете, что exportопределяет переменную среды, а не псевдоним. Команда less использует флаги из переменной окружения LESS, поэтому ваш ответ нуждается в некоторой доработке.
Алексис