Cara syntax highlight melalui Less


133

apakah ada cara untuk menyoroti file yang saya lihat dalam Less?

sebenarnya saya menggunakan perintah ini untuk membuka file xml (dan kadang-kadang serangkaian dari mereka)

less htmleditors/htmleditors_config.xml

atau

less [multiple files]

Saya ingin tetap di Less (untuk mempelajari program itu lebih baik dan menggunakan pengetahuan saya tentang: n dan: p untuk navigasi berikutnya / sebelumnya)

Tetapi ia juga menginginkan semacam penyorotan sintaksis dasar - setidaknya perlihatkan komentar secara berbeda. Apakah Anda tahu cara untuk melakukannya?

Jawaban:


123

Anda dapat menggunakan sumber-sorotan GNU , seperti yang ditunjukkan di sini (path mungkin berbeda, lihat di bawah):

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

Pada Debian Stretch dan Fedora 25, nama paket dan jalur skrip berbeda

  • 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
    

Saya mengambil pesan kesalahan berikut ketika saya menjalankan less ~/.zshrc. Kesalahan: src-hilite-lesspipe.sh: line 9: source-highlight: command not found. Saya menjalankan ini di MacOSX.
JJD

2
@ JJD Apakah Anda menginstal sumber-sorot?
Max Nanasy

13
OSX: brew install source-highlight; export LESSOPEN="| /usr/local/bin/src-hilite-lesspipe.sh %s". Perhatikan perubahan jalur.
Gregg Lind

23
Pada Debian: sudo apt-get install source-highlight, export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s",export LESS=' -R '
Morgan Courbet

3
peringatan kecil: source-highlight saat ini tidak mendukung penurunan harga.
dhulihan

97

Terbaik dari kedua jawaban sebelumnya: Anda dapat meminta editor default sistem dari dalam kurang, dengan menekan v.


3
Wow! Ini sangat berguna!
dancek

13
Kutukan yang membuka Nano di kotak Ubuntu saya!
jamesc

5
Kemudian atur $ EDITOR atau $ VISUAL ke vim (atau emacs, atau gedit, atau joe, atau ed, atau ditambang, atau ...).
Daniel H

@jamesc FYI, Anda dapat mengaktifkan sintaks di Nano, di sini adalah bagaimana.
Kapten Man

@CaptainMan Nggak nggak nggak! Saya mengubah default kembali ke vim seperti yang dikatakan Daniel H! : D
jamesc

33
pygmentize somefile.ex | less -R

atau

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

Pygmentize hadir sebagai bagian dari sintaks Pygments Python highliter .


3
pygmentizejuga bekerja dengan LESSOPENhal - hal yang disebutkan dalam jawaban lain di sini.
Nathan

2
Untuk mendapatkan pygmentize, Anda perlu Python dan kemudian Anda dapat menginstal pygmentizedengan pip install pygments.
wkschwartz

3
Untuk mendapatkan lessmenggunakan pygmentizeuntuk digunakan sintaks: which pygmentize 2> /dev/null >&2 && export LESSOPEN="| pygmentize -g -f terminal256 %s". -guntuk membuatnya bekerja dengan pipa ( less <(diff -u file1 files)). Ini tersedia dalam community/pygmentizepaket untuk arch linux, dan python-pygmentsuntuk debian.
x-yuri

Saya suka outputnya pygmentize, tetapi ternyata terlalu lambat. Saya datang dengan jawaban ini yang lebih cepat dan masih 256-warna cantik.
Tom Hale

16

Saya pikir Anda harus menggunakan editor teks. Saya suka vim sendiri. Itu akan memberi Anda BANYAK kekuatan saat melihat file dan kemudian ketika Anda ingin mengeditnya, Anda sudah tahu dasar-dasarnya.

Berikut adalah beberapa keuntungan menggunakan editor teks (khusus vim):

  • penyorotan sintaksis
  • perintah gerakan yang kuat
  • Temukan
  • lompat ke lokasi tertentu dalam file (disebut tanda)
  • lipat (berguna ketika Anda hanya ingin melihat fungsi stubbs)

Untuk membuka file Anda dalam mode hanya baca gunakan ini:

vim -R <file name>

Berikut ini adalah panduan navigasi dasar:

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

Berikut ini tautan untuk informasi lebih lanjut:

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

Sekadar rekap, jika Anda akan menggunakan unix vim cukup mendasar. Saya telah mendengar bahwa belajar vim seperti belajar mengetik. Ini adalah alat paling berguna berikutnya yang dapat Anda pelajari untuk pemrograman.

(Hanya untuk menghindari perang editor, Anda juga dapat melihat emacs atau editor lain, namun saya pribadi lebih suka vim)


1
Saya yang kedua ini. Vim diluncurkan secepat kurang, dan banyak pintasan keyboard (mis. Pencarian, halaman berikutnya, halaman sebelumnya) identik.
Jeremy W. Sherman

10
Hanya FYI, pada banyak sistem, viewadalah alias untuk vim -R.
Andrew Ferrier

15

Seperti yang orang lain katakan, Anda dapat menggunakan kekuatan vim. Tetapi yang penting, Anda dapat melakukannya tanpa mempelajari cara menggunakan vi / vim.

Vim hadir dengan less.vimskrip yang berfungsi cukup baik sebagai pengganti kurang, dengan penyorotan sintaksis penuh warna. Ini menggunakan lesskeybindings (tekan saja 'q' untuk berhenti).

Itu memiliki beberapa masalah, jadi saya memperbaikinya . Berikut screenshot dari posting blog saya di atasnya (diarsipkan 2013-04-09; asli melempar 503):

tangkapan layar https://github.com/huyz/less.vim


2
Luar biasa! Tetapi karena saya tidak dapat segera menemukan skripnya, saya ingin membagikan perintah untuk menemukannya: find /usr/share/vim -name 'less.sh'yang diambil dari intisari ini: gist.github.com/chauncey-garrett/9773770
nuala

Menambah komentar @ yoshi, untuk dengan cepat menambahkan vimlessperintah (mengikuti nomenklatur vimdiff), lakukan:ln -s $(find /usr/share/vim -name 'less.sh') /usr/local/bin/vimless
waldyrious

Tautannya adalah 404!
Acgtyrant

@acgtyrant Harus diperbaiki sekarang; untungnya Internet Archive memilikinya.
bb010g

10

Saya juga mencari ini dan menemukan solusi lain menggunakan Vim: http://ubuntu-tutorials.com/2008/07/14/use-vim-as-a-syntax-highlighting-pager/

Posting agak lama, jadi sekarang pada distro baru vim 7.2 dikirimkan dan .bashrc akan membaca: alias vless = 'vim -u /usr/share/vim/vim72/macros/less.vim'


1
MacVim hadir dengan skrip shell yang dapat Anda gunakan secara langsung, terletak di: /Applications/MacVim.app/Contents/Resources/vim/runtime/macros/less.sh
Nick

1
Fitur ini didokumentasikan dalam Vim sendiri di bawah:help less
joeytwiddle

8

Saya senang mengumumkan paket baru, e2ansi , yang menyediakan dukungan penyorotan sintaks untuk pager seperti moredan less.

Paket ini menggunakan ibu dari semua editor teks, Emacs , untuk melakukan penyorotan sintaksis yang sebenarnya. Sebagai bonus tambahan, semua konversi lain yang biasanya dilakukan oleh Emacs - seperti file yang tidak dikompresi - juga dilakukan.

Contoh

Berikut ini adalah hasil dari melihat file menggunakan lessdan e2ansi:

Contoh

Konfigurasi

Paket ini menyediakan alat baris perintah e2ansi-catyang memulai Emacs dalam mode batch, membuka file, sintaksis menyoroti mereka, dan merender hasilnya menggunakan urutan ANSI.

Anda dapat mengintegrasikan ini ke dalam lessdengan mengatur variabel-variabel berikut ke, misalnya (lokasi file init Anda dapat bervariasi):

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

Dalam konfigurasi di atas, lesspulihkan konten jendela terminal yang asli sementara morecukup tampilkan konten baru setelah prompt.

Catatan: Jika Anda menggunakan versi lama less, itu mungkin tidak mendukung ||atau -sintaksis, dalam hal ini Anda mungkin perlu menggunakan secara sederhana LESSOPEN=|/usr/local/emacs ....

Menggunakan lesspipa

Karakter "-" di LESSOPENmenunjukkan bahwa filter input juga harus digunakan saat memipis teks ke less. Dalam hal ini, Emacs hanya bisa mengandalkan teks itu sendiri (dan bukan nama file). Untungnya, Emacs menyediakan sistem untuk ini. Selain itu, file file yang disediakan e2ansi-magic.elmengatur jenis file tambahan. Sebagai contoh:

Contoh pipa

Mengapa menggunakan Emacs?

  • Emacs memiliki dukungan untuk hampir semua bahasa pemrograman dan format teks terstruktur. Dalam kebanyakan kasus, dukungan penyorotan sintaks sangat baik.
  • Anda dapat dengan mudah menambahkan dukungan untuk lebih banyak bahasa dan format, atau memodifikasi paket yang ada sesuai dengan kebutuhan Anda.
  • Emacs mendukung tema warna. Saat menggunakan e2ansi, warna dalam tema dipertahankan saat melihat file less. Anda dapat memilih tema warna yang sesuai dari sejumlah sumber, atau merancang sendiri.
  • Jika Anda menggunakan Emacs sebagai editor pilihan Anda, Anda akan mendapatkan sorotan yang sama di editor seperti yang Anda dapatkan ketika melihat file menggunakan less(minus batasan dalam format urutan ANSI dan jendela terminal).
  • lessakan memanfaatkan fitur Emacs yang melakukan konversi otomatis, misalnya file yang tidak dikompresi. Bahkan, Anda dapat mengajar Emacs untuk melakukan segala jenis konversi seperti secara otomatis mengkonversi file biner ke bentuk yang dapat dibaca manusia menggunakan alat eksternal.
  • Anda dapat melihat file yang terletak di komputer lain dengan menggunakan sintaks Emacs untuk akses jarak jauh seperti /USER@HOST:FILENAME.

Tautan yang bermanfaat

  • e2ansididistribusikan di Melpa dan dapat diinstal menggunakan sistem paket Emacs standar
  • e2ansidi-host di GitHub
  • The e2ansihalaman di Emacs Wiki
  • Rumah dari less.

Catatan sistem operasi

  • Pada MS Windows, konsol tidak secara asli mendukung urutan ANSI. Untungnya, lessaplikasi ini mampu menampilkannya. Saya tidak mengetahui adanya distribusi biner kontemporer lessuntuk MS Windows dan file build yang disediakan sulit digunakan. Untungnya, mudah dibuat lessmenggunakan CMake , lihat teks ini untuk detailnya.

  • OS X mendistribusikan versi kuno less. Untungnya, mudah untuk membangun versi modern langsung dari sumbernya.


Untuk OS X, saya sarankan menggunakan pembuat paket brew [ brew.sh/] dengan brew dupes [ github.com/Homebrew/homebrew-dupes] untuk menginstal versi terbaru dari hal-hal seperti less.
drevicko

"didukung oleh emacs" - menjalankan seluruh VM hanya untuk melihat file? ;-) dan +1
Alois Mahdal

6

Jika Anda telah menginstal GNU Source-highlight Anda dapat menggunakan perintah berikut untuk menyorot sintaks dari satu file:

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

Dapat src-hilite-lesspipe.shmenerima input melalui pipa juga?
Waldyrious

2

source-highlightmemiliki .shskrip yang terletak di /usr/share/source-highlight/*.sh. Saya telah membuat tautan simbolis dengan nama hcatdalam /usr/bin.

Ini menunjukkan output yang disorot di terminal (konsol) - hcatdisorot kucing.

Bagaimana cara:

[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

Menggunakan OS X 10.9 (Maverick) ini akan membantu:

  • brew install source-highlight (Asumsikan brew sudah diinstal - http://brew.sh )
  • sudo nano /etc/launchd.conf

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

    (Tambahkan ke /etc/launchd.conf)

  • reboot


0

Di mac, Anda bisa mengetik view filename, melakukan hal serupa seperti kurang.


1
Dengan OSX, view filenameluncurkan saja vimsecara default - binding key yang sedikit berbeda less(lihat jawaban lain untuk pertanyaan ini untuk lebih jelasnya).
drevicko

0

Setelah menginstal source-highlight GNU (paket dev-util/source-highlightpada sabayon / gentoo), saya mengkonfigurasi env tersebut di /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

Saya tidak suka mengganti lesspipekarena memiliki fitur lain. Penggabungan tidak berhasil.


0

Jika Anda ingin penyorotan sintaks yang sama dengan yang Anda gunakan di Vim , tetapi karena alasan tertentu Anda lebih suka menggunakan lesspager Anda, Anda dapat menggunakan skrip ini: https://github.com/rkitover/vimpager

Penggunaan dasar adalah:

vimpager file.txt

atau

vimcat file.ext | less -R

Anda dapat menggunakan -cuntuk memberikan perintah tambahan yang tidak ada pada Anda .vimrc(mis. Memilih skema warna yang berbeda). Perintah lengkap yang saya gunakan adalah:

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

Hati-hati: Jika Vim Anda meminta Anda untuk menekan Enter ketika itu dimulai, Anda tidak akan melihat prompt, tetapi tidak ada yang akan terjadi sampai Anda menekan Enter! The cmdheighttrick di atas dapat membantu untuk mengurangi itu.


0

Saya menemukan highlightyang:

  • Mendukung banyak skema warna dan 256 warna
  • Bekerja pada STDIN (tidak seperti source-highlight)
  • Jauh lebih cepat daripada pygmentize

Tangkapan layar

Berikut ini adalah skrip yang saya panggil highlight-less-wrapperyang berisi .bashrcpetunjuk tentang cara mengatur lessagar menggunakannya secara otomatis.

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

"Karena Github sekarang menjadi bagian dari Mordor Corp, acara utama Git repo pindah" Tertarik, tapi sekarang bukan tahun 90-an, para pengembang perlu tumbuh.
Urda

0

Saya memiliki pertanyaan yang sama dan saya mendengar, membaca semua jawaban dan berikut ini adalah apa yang akhirnya saya lakukan untuk memiliki sintaks yang menyoroti setiap kali saya menggunakan lessatau most:

sudo apt install source-highlight

Lalu saya pergi dan membuat alias untuk saya lessdan most(saya menggunakan ZSH, tetapi Anda dapat menambahkan alias untuk .bashrcfile Anda jika Anda menggunakan bash):

vim ~/.zshrc

( Bagi mereka yang mungkin terjebak dalam vim: tekan iuntuk pergi ke mode edit, ketika Anda selesai tekan Esclalu :lalu xdan akhirnya Enteruntuk menyimpan perubahan )

Dan rekatkan baris berikut untuk distro berbasis debian (seperti Debian, Ubuntu, Mint, dll.):

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'

atau untuk distro 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'

Ingat untuk menutup terminal dan membukanya lagi untuk memastikan alias dibuat.

Sekarang Anda dapat menikmati warnanya:

most yourFile.xml
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.