Как выделить синтаксис с помощью Less


133

Есть ли способ синтаксического выделения файла, который я вижу в Less?

на самом деле я использую эту команду, чтобы открыть файл XML (а иногда и серию из них)

less htmleditors/htmleditors_config.xml

или же

less [multiple files]

Я хотел бы остаться в Меньше (чтобы лучше изучить эту программу и использовать мои знания: n и: p для следующей / предыдущей навигации)

Но ему также нужна какая-то базовая подсветка синтаксиса - по крайней мере, показывать комментарии по-другому. Вы знаете какой-нибудь способ сделать это?

Ответы:


123

Вы можете использовать GNU source-highlight , как показано здесь (путь может отличаться, см. Ниже):

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

Начиная с Debian Stretch и Fedora 25, имена пакетов и пути к скриптам различаются

  • 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
    

Я получаю следующее сообщение об ошибке при запуске less ~/.zshrc. Ошибка: src-hilite-lesspipe.sh: line 9: source-highlight: command not found. Я запускаю это на MacOSX.
JJD

2
@JJD Вы установили источник-подсветка?
Макс Нанаси

13
OSX: brew install source-highlight; export LESSOPEN="| /usr/local/bin/src-hilite-lesspipe.sh %s", Обратите внимание на изменение пути.
Грегг Линд

23
В Debian: sudo apt-get install source-highlight, export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s",export LESS=' -R '
Morgan Курбе

3
small caveat: source-highlight в настоящее время не поддерживает уценку.
Дхулихан

97

Лучший из двух предыдущих ответов: вы можете вызвать системный редактор по умолчанию изнутри, нажав v.


3
Вау! Это удивительно полезно!
Dancek

13
Проклятия, которые открыли Нано на моей коробке с Ubuntu!
Jamesc

5
Затем установите $ EDITOR или $ VISUAL в vim (или emacs, или gedit, или joe, или ed, или mined, или ...).
Даниэль Х

@jamesc К вашему сведению, вы можете включить подсветку синтаксиса в Nano, вот как.
Капитан Мэн

@CaptainMan Нету Нету Нету! Я изменил значение по умолчанию обратно на vim, как сказал Дэниел Х! : D
jamesc

33
pygmentize somefile.ex | less -R

или же

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

Pygmentize входит в состав подсветки синтаксиса Python Python .


3
pygmentizeтакже работает с LESSOPENматериалом, упомянутым в других ответах здесь.
Натан

2
Чтобы получить pygmentize, вам нужен Python, а затем вы можете установить pygmentizeс pip install pygments.
wkschwartz

3
Чтобы lessиспользовать pygmentizeдля подстветкой синтаксиса: which pygmentize 2> /dev/null >&2 && export LESSOPEN="| pygmentize -g -f terminal256 %s". -gзаставить его работать с трубами ( less <(diff -u file1 files)). Это доступно в community/pygmentizeпакете для arch linux, и в python-pygmentsтечение debian.
x-yuri

Мне нравится вывод pygmentize, но он оказался слишком медленным. Я придумала этот ответ, который быстрее и все же хорошенький с 256 цветами.
Том Хейл

16

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

Вот некоторые из преимуществ использования текстового редактора (в частности, vim):

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

Чтобы открыть файл в режиме только для чтения, используйте это:

vim -R <file name>

Вот основное руководство по навигации:

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

Вот ссылка для получения дополнительной информации:

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

Напомним, что если вы будете использовать Unix, vim довольно фундаментален. Я слышал, что изучение vim похоже на обучение печатанию. Это следующий наиболее полезный инструмент для программирования.

(Чтобы избежать войн редакторов, вы также можете посмотреть на emacs или другой редактор, однако я лично предпочитаю vim)


1
Я второй это. Vim запускается так же быстро, как и меньше, и многие сочетания клавиш (например, поиск, следующая страница, предыдущая страница) идентичны.
Джереми У. Шерман

10
Просто FYI, на многих системах, viewявляется псевдонимом для vim -R.
Эндрю Ферье

15

Как уже говорили другие, вы можете использовать силу vim. Но важно то, что вы можете сделать это, не научившись использовать vi / vim.

Vim поставляется со less.vimсценарием, который работает довольно хорошо, заменяя меньше, с подсветкой синтаксиса. Он использует lessсочетания клавиш (просто нажмите «q», чтобы выйти).

У него было несколько проблем, поэтому я его улучшил . Вот скриншот из моего поста в блоге (заархивирован 2013-04-09; оригинальные выбросы 503):

снимок экрана https://github.com/huyz/less.vim


2
Потрясающие! Но так как я не смог сразу найти сценарий, я хотел бы поделиться командой для его нахождения: find /usr/share/vim -name 'less.sh'которая взята из этой сущности: gist.github.com/chauncey-garrett/9773770
Нуала

В дополнение к комментарию @ yoshi, чтобы быстро добавить vimlessкоманду (следуя номенклатуре vimdiff), выполните:ln -s $(find /usr/share/vim -name 'less.sh') /usr/local/bin/vimless
waldyrious

Ссылка 404!
Активист

@acgtyrant должен быть исправлен сейчас; Интернет-архив, к счастью, есть.
bb010g

10

Я также искал это и нашел другое решение, используя Vim: http://ubuntu-tutorials.com/2008/07/14/use-vim-as-a-syntax-highlighting-pager/

Пост довольно старый, поэтому теперь на более свежих дистрибутивах vim 7.2 поставляется, и .bashrc будет читать: alias vless = 'vim -u /usr/share/vim/vim72/macros/less.vim'


1
MacVim поставляется со сценарием оболочки, который вы можете использовать напрямую, расположенный в: /Applications/MacVim.app/Contents/Resources/vim/runtime/macros/less.sh
Ник

1
Эта функция задокументирована в самом Vim под:help less
joeytwiddle

8

Я рад объявить о новом пакете, 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. К счастью, современную версию легко создать прямо из исходного кода.


Для OS X я бы рекомендовал использовать менеджер пакетов brew [ brew.sh/] с brew dupes [ github.com/Homebrew/homebrew-dupes] для установки современных версий таких вещей, как less.
drevicko

"питание от emacs" - запуск целой виртуальной машины только для просмотра файла? ;-) и +1
Алоис

6

Если у вас установлен GNU Source-highlight, вы можете использовать следующую команду, чтобы выделить синтаксис одного файла:

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

Может ли src-hilite-lesspipe.shполучать входные данные через канал?
Waldyrious

2

source-highlightимеет .shсценарий, расположенный в /usr/share/source-highlight/*.sh. Я создал символическую ссылку на него с именем hcatв /usr/bin.

Показывает выделенный вывод в терминале (консоли) - hcatподсвечивается кат.

Как:

[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

Используя OS X 10.9 (Maverick), это поможет:

  • brew install source-highlight (при условии, что brew установлен - http://brew.sh )
  • sudo nano /etc/launchd.conf

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

    (Добавить в /etc/launchd.conf)

  • перезагрузка


0

В Mac, вы можете просто набрать view filename, делает похожую вещь, как меньше.


1
С OSX view filenameпросто запускается vimпо умолчанию - немного другие привязки клавиш less(см. Другие ответы на этот вопрос для более подробной информации).
drevicko

0

После установки GNU source-highlight (пакет dev-util/source-highlightна sabayon / gentoo) я сконфигурировал эти envs в /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

Я не хотел заменять, lesspipeпотому что у этого есть другие особенности. Конкатенация не работает.


0

Если вам нужна та же подсветка синтаксиса, которую вы используете в Vim , но по какой-то причине вы предпочитаете использовать ее lessкак пейджер, вы можете использовать этот скрипт: https://github.com/rkitover/vimpager

Основное использование будет:

vimpager file.txt

или же

vimcat file.ext | less -R

Вы можете использовать -cдля передачи дополнительных команд, которых нет в вашей .vimrc(например, выбор другой схемы цветов). Полная команда, которую я использую:

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

Осторожно: если ваш Vim попросит вас нажать Enter при запуске, вы не увидите приглашение, но ничего не произойдет, пока вы не нажмете Enter! cmdheightХитрость выше , может помочь смягчить это.


0

Я нашел, highlightкоторый:

  • Поддерживает несколько цветовых схем и 256 цветов
  • Работает на STDIN (в отличие от source-highlight)
  • Намного быстрее чем pygmentize

Скриншот

Вот скрипт, который я вызываю и highlight-less-wrapperкоторый содержит .bashrcинструкции о том, как настроить lessего использование автоматически.

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

«Поскольку Github теперь является частью Mordor Corp, основной репозиторий Git перенесен» Был заинтересован, но, разумеется, уже не 90-е годы, разработчикам нужно расти.
Урда

0

У меня был тот же вопрос, и я услышал, прочитал все ответы, и вот что я, наконец, сделал, чтобы подсветка синтаксиса использовалась каждый раз, когда я использую lessили most:

sudo apt install source-highlight

Затем я пошел и создал псевдоним для моего lessи most(я использую ZSH, но вы можете добавить псевдонимы для вашего .bashrcфайла, если вы используете bash):

vim ~/.zshrc

( Для тех, кто может застрять в vim: нажмите, iчтобы перейти в режим редактирования, когда вы закончите, нажмите Escзатем, :затем, xнаконец, Enterчтобы сохранить изменения )

И вставьте следующие строки для дистрибутивов на основе Debian (таких как Debian, Ubuntu, Mint и т. Д.):

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'

или для 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'

Не забудьте закрыть терминал и открыть его снова, чтобы убедиться, что псевдоним создан.

Теперь вы можете наслаждаться цветами:

most yourFile.xml
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.