Как выделить синтаксис с помощью Less
Есть ли способ синтаксического выделения файла, который я вижу в Less?
на самом деле я использую эту команду, чтобы открыть файл XML (а иногда и серию из них)
less htmleditors/htmleditors_config.xml
или же
less [multiple files]
Я хотел бы остаться в Меньше (чтобы лучше изучить эту программу и использовать мои знания:n и:p для следующей / предыдущей навигации)
Но ему также нужна какая-то базовая подсветка синтаксиса - по крайней мере, показывать комментарии по-другому. Вы знаете какой-нибудь способ сделать это?
17 ответов
Вы можете использовать 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
Лучший из двух предыдущих ответов: вы можете вызвать системный редактор по умолчанию изнутри, нажав v.
pygmentize somefile.ex | less -R
или же
function cless () {
pygmentize -f terminal "$1" | less -R
}
Pygmentize входит в состав подсветки синтаксиса Python Python.
Как уже говорили другие, вы можете использовать силу vim. Но важно то, что вы можете сделать это, не научившись использовать vi / vim.
Vim поставляется с less.vim
Скрипт, который работает довольно неплохо, заменяя меньше, с полноцветной подсветкой синтаксиса. Оно использует less
сочетания клавиш (просто нажмите "q", чтобы выйти).
У него было несколько проблем, поэтому я его улучшил. Вот скриншот из моего поста в блоге (заархивирован 2013-04-09; оригинальные выбросы 503):
Я думаю, что вы должны использовать текстовый редактор. Я люблю 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)
Я также искал это и нашел другое решение, используя 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'
Я рад объявить о новом пакете, 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 и может быть установлен с использованием стандартной системы пакетов Emacse2ansi
размещен на GitHub-
e2ansi
страница в Emacs Wiki - Дом
less
,
Примечания по операционной системе
В MS Windows консоль не поддерживает последовательности ANSI. К счастью,
less
Приложение способно их визуализировать. Я не знаю ни о каком современном бинарном распределенииless
для MS Windows и предоставленные файлы сборки трудно использовать. К счастью, это легко построитьless
используя CMake, см. этот текст для деталей.OS X распространяет древнюю версию
less
, К счастью, современную версию легко создать прямо из исходного кода.
Если у вас установлен GNU Source-highlight, вы можете использовать следующую команду, чтобы выделить синтаксис одного файла:
$ src-hilite-lesspipe.sh yourfile.xml | less -R
После установки 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
потому что у этого есть другие особенности. Конкатенация не работает.
Я нашел 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
Используя 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)
перезагружать
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
У меня был тот же вопрос, и я услышал, прочитал все ответы, и вот что я наконец-то сделал, чтобы подсветка синтаксиса каждый раз использовалась 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
Если вы хотите использовать ту же подсветку синтаксиса, которую вы используете в 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
уловка выше может помочь смягчить это.
С помощью https://gitlab.com/saalen/highlight илиapp-text/highlight
если Gentoo уже установлен, приведенная ниже конфигурация работает просто и красиво:
$ env | grep LESS
LESS=-R -M --shift 5
LESSOPEN=| command highlight -O ansi %s
В Mac вы можете просто набрать view filename
Мало похожая вещь нравится меньше.
Eсть fish
Плагин оболочки для облегчения интеграции. Однако вам все равно необходимо установить библиотеку (см. ответ Brandstaetter ).
fisher install decors/fish-source-highlight