Як виділити синтаксис через Менше


133

чи є спосіб синтаксису виділити файл, який я бачу в Менше?

насправді я використовую цю команду, щоб відкрити XML-файл (а іноді і їх серію)

less htmleditors/htmleditors_config.xml

або

less [multiple files]

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

Але також хочеться виділити базовий синтаксис - принаймні показати коментарі по-іншому. Чи знаєте ви будь-який спосіб це зробити?

Відповіді:


123

Можна використовувати підсвітку джерела GNU , як показано тут (шлях може відрізнятися, див. Нижче):

 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
невеликий застереження: джерело-підсвітка наразі не підтримує розмітку.
dhulihan

97

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


3
Оце Так! Це напрочуд корисно!
танцювати

13
Прокльони, які відкрили Nano на моїй скриньці Ubuntu!
jamesc

5
Потім встановіть $ EDITOR або $ VISUAL на vim (або emacs, або gedit, або joe, або ed, або minied, або…).
Даніель Н

@jamesc FYI, ви можете ввімкнути підсвічування синтаксису в Nano, ось як.
Людина капітана

@CaptainMan Nope nope nope! Я змінюю типовий режим назад на vim, як сказав Даніель Н! : D
jamesc

33
pygmentize somefile.ex | less -R

або

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

Pygmentize входить до складу синтаксису синтаксису Pygments 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
nuala

Додавши до коментаря @ 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
Nick

1
Ця особливість задокументована в самому Vim під:help less
joeytwiddle

8

Я радий оголосити про новий пакет, e2ansi , який забезпечує підтримку підкреслення синтаксису для пейджерів, як moreі less.

У пакеті використовується мати всіх текстових редакторів, Emacs , щоб виконати фактичне виділення синтаксису. В якості додаткового бонусу виконуються також всі інші перетворення, які зазвичай виконуються Emacs - як, наприклад, нестискаючі файли.

Приклад

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

Приклад

Конфігурація

У пакеті передбачений інструмент командного рядка, e2ansi-catякий запускає Emacs у пакетному режимі, відкриває файли, виділяє їх синтаксис та надає результат, використовуючи послідовності ANSI.

Ви можете інтегрувати це less, встановивши, наприклад, такі змінні (наприклад, місце вашого файлу init може відрізнятися):

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/] з пивоварінням [ github.com/Homebrew/homebrew-dupes], щоб встановити оновлені версії подібних речей less.
drevicko

"powered by emacs" - працює цілий VM просто для перегляду файлу? ;-) та +1
Алоїс Магдал

6

Якщо у вас встановлено джерело підсвітки GNU, ви можете використовувати таку команду, щоб виділити синтаксис одного файлу:

$ 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 -light (Припустимо, що вариться встановлено - 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 (пакунок 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 repo переміщена" Була зацікавлена, але cmon це вже не 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.