125

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

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

less htmleditors/htmleditors_config.xml

или же

less [multiple files]

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

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

15 ответов15

115

Вы можете использовать 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
    
87

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

32
pygmentize somefile.ex | less -R

или же

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

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

15

Я думаю, что вы должны использовать текстовый редактор. Я люблю 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)

14

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

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

У него было несколько проблем, поэтому я его улучшил. У меня есть скриншот на http://huyz.us/2011/a-less-like-pager-with-color-syntax-highlighting/

9

Я также искал это и нашел другое решение, используя 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'

7

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

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

6

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

$ src-hilite-lesspipe.sh yourfile.xml | less -R
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)

  • перезагружать

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
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
0

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

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
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

После установки 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 потому что у этого есть другие особенности. Конкатенация не работает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .