วิธีเน้นไวยากรณ์ผ่าน Less


133

มีวิธีการเน้นไวยากรณ์ไฟล์ที่ฉันเห็นใน Less หรือไม่

ที่จริงฉันใช้คำสั่งนี้เพื่อเปิดไฟล์ xml (และบางครั้งชุดของพวกเขา)

less htmleditors/htmleditors_config.xml

หรือ

less [multiple files]

ฉันต้องการที่จะอยู่ใน Less (เพื่อเรียนรู้โปรแกรมที่ดีขึ้นและใช้ความรู้ของฉันของ: 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 คุณติดตั้งแหล่งข้อมูลสำคัญหรือไม่
Max Nanasy

13
OSX: brew install source-highlight; export LESSOPEN="| /usr/local/bin/src-hilite-lesspipe.sh %s". หมายเหตุการเปลี่ยนเส้นทาง
Gregg Lind

23
ใน Debian: sudo apt-get install source-highlight, export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s",export LESS=' -R '
มอร์แกน Courbet

3
ข้อแม้เล็ก: แหล่งที่มาเน้นไม่สนับสนุน markdown
dhulihan

97

ที่ดีที่สุดของทั้งสองคำตอบก่อนนี้: vคุณสามารถเรียกใช้โปรแกรมแก้ไขระบบเริ่มต้นจากภายในน้อยลงโดยการกด


3
ว้าว! มันมีประโยชน์อย่างน่าอัศจรรย์!
dancek

13
คำสาปที่เปิดนาโนบนกล่อง Ubuntu ของฉัน!
jamesc

5
จากนั้นตั้งค่า $ EDITOR หรือ $ VISUAL เป็น vim (หรือ emacs หรือ gedit หรือ joe หรือ ed หรือ mined หรือ ... )
Daniel H

@jamesc FYI คุณสามารถเปิดใช้งานการเน้นไวยากรณ์ในนาโนได้นี่คือวิธี
Captain Man

@CaptainMan ไม่ไม่เลย! ฉันเปลี่ยนค่าเริ่มต้นกลับเป็นกลุ่มเหมือน Daniel H พูด! : D
jamesc

33
pygmentize somefile.ex | less -R

หรือ

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

Pygmentize มาเป็นส่วนหนึ่งของไวยากรณ์ highliter


3
pygmentizeใช้ได้กับLESSOPENสิ่งที่กล่าวถึงในคำตอบอื่น ๆ ที่นี่
นาธาน

2
ที่จะได้รับpygmentizeคุณต้องหลามและจากนั้นคุณสามารถติดตั้งกับ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 สีสวย
Tom Hale

16

ฉันคิดว่าคุณควรใช้โปรแกรมแก้ไขข้อความ ฉันชอบเป็นกลุ่มตัวเอง นั่นจะทำให้คุณมีพลังมากเมื่อดูไฟล์และเมื่อคุณต้องการแก้ไขไฟล์คุณจะรู้พื้นฐานแล้ว

นี่คือข้อดีของการใช้โปรแกรมแก้ไขข้อความ (เป็นกลุ่มเฉพาะ):

  • ไวยากรณ์เน้น
  • คำสั่งการเคลื่อนไหวที่มีประสิทธิภาพ
  • หา
  • ข้ามไปยังตำแหน่งเฉพาะในไฟล์ (เรียกว่าเครื่องหมาย)
  • การพับ (มีประโยชน์เมื่อคุณต้องการเห็นสตับส์ของฟังก์ชัน)

ในการเปิดไฟล์ของคุณในโหมดอ่านอย่างเดียวให้ใช้สิ่งนี้:

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 เป็นพื้นฐานที่สวย ฉันเคยได้ยินว่าการเรียนเป็นกลุ่มนั้นเหมือนกับการเรียนรู้ที่จะพิมพ์ เป็นเครื่องมือที่มีประโยชน์มากที่สุดถัดไปที่คุณสามารถเรียนรู้สำหรับการเขียนโปรแกรม

(เพียงเพื่อหลีกเลี่ยงสงครามบรรณาธิการคุณยังสามารถดูเป็น emacs หรือบรรณาธิการอื่น ๆ แต่ส่วนตัวฉันชอบเป็นกลุ่ม)


1
ฉันที่สองนี้ Vim เปิดใช้งานเร็วที่สุดและแป้นพิมพ์ลัดจำนวนมาก (เช่นการค้นหาหน้าถัดไปหน้าก่อนหน้า) นั้นเหมือนกัน
Jeremy W. Sherman

10
เพียง FYI ในจำนวนมากของระบบที่เป็นนามแฝงสำหรับview vim -R
Andrew Ferrier

15

อย่างที่คนอื่นพูดคุณสามารถใช้พลังแห่งเสียงเรียกเข้า แต่ที่สำคัญคุณสามารถทำได้โดยไม่ต้องเรียนรู้วิธีใช้ 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

@acgtyrant ควรได้รับการแก้ไขแล้ว อินเทอร์เน็ตอาร์ไคฟ์ขอบคุณมาก
bb010g

10

ฉันยังค้นหาสิ่งนี้และพบวิธีแก้ปัญหาอื่นที่ใช้ Vim: http://ubuntu-tutorials.com/2008/07/14/use-vim-as-a-syntax-highlighting-pager/

โพสต์ค่อนข้างเก่าดังนั้นตอนนี้ distros 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ที่ให้การสนับสนุนไวยากรณ์เน้นวิทยุติดตามตัวเหมือนและmoreless

แพคเกจใช้แม่ของโปรแกรมแก้ไขข้อความทั้งหมด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 วิกิพีเดีย
  • lessบ้านของ

หมายเหตุระบบปฏิบัติการ

  • บน MS Windows คอนโซลไม่สนับสนุน ANSI ตามลำดับ โชคดีที่lessแอปพลิเคชันสามารถแสดงผลได้ ฉันไม่ได้ตระหนักถึงการแจกจ่ายไบนารีร่วมสมัยของlessสำหรับ MS Windows และไฟล์บิลด์ที่ให้มานั้นใช้งานยาก โชคดีที่มันเป็นเรื่องง่ายที่จะสร้างlessโดยใช้CMakeดูข้อความนี้เพื่อดูรายละเอียด

  • OS X lessจำหน่ายรุ่นโบราณ โชคดีที่มันง่ายที่จะสร้างเวอร์ชั่นที่ทันสมัยโดยตรงจากแหล่งที่มา


สำหรับ OS X ผมอยากแนะนำให้ใช้แพคเกจผู้จัดการชง [ brew.sh/]กับหลอกชง [ github.com/Homebrew/homebrew-dupes]lessการติดตั้งรุ่นขึ้นไปวันที่สิ่งที่ต้องการ
drevicko

"ขับเคลื่อนโดย emacs" - ใช้ VM ทั้งหมดเพื่อดูไฟล์หรือไม่ ;-) และ +1
Alois Mahdal

6

หากคุณมีGNU Source-highlightติดตั้งอยู่คุณสามารถใช้คำสั่งต่อไปนี้เพื่อเน้นไวยากรณ์ของไฟล์เดียว:

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

สามารถsrc-hilite-lesspipe.shรับอินพุตผ่านไพพ์ได้เช่นกัน?
วาลดีเรีย

2

source-highlightมีสคริปต์อยู่ใน.sh /usr/share/source-highlight/*.shเราได้สร้างการเชื่อมโยงสัญลักษณ์ไปที่มีชื่อในhcat/usr/bin

มันแสดงให้เห็นว่าการส่งออกเน้นใน terminal (คอนโซล) - 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 (ไม่ฝักใฝ่ฝ่ายใด) นี่จะเป็นการหลอกลวง:

  • ชงติดตั้งแหล่งที่มาเน้น (สมมติว่ามีการติดตั้งชง - 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(เช่นการเลือก colorcheme ที่แตกต่างกัน) คำสั่งทั้งหมดที่ฉันใช้คือ:

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's devs อีกต่อไปที่ต้องเติบโตขึ้น
Urda

0

ฉันมีคำถามเดียวกันและฉันได้ยินเสียงอ่านคำตอบทั้งหมดและต่อไปนี้คือสิ่งที่ฉันได้ทำในที่สุดเพื่อเน้นไวยากรณ์ทุกครั้งที่ฉันใช้lessหรือmost:

sudo apt install source-highlight

จากนั้นฉันไปและสร้างนามแฝงสำหรับฉันlessและmost(ฉันใช้ ZSH แต่คุณสามารถเพิ่มชื่อแทนสำหรับ.bashrcไฟล์ของคุณหากคุณใช้ bash):

vim ~/.zshrc

( สำหรับผู้ที่อาจติดค้างในกลุ่ม: กดiเพื่อไปที่โหมดแก้ไขเมื่อคุณทำเสร็จEscแล้วกดจาก:นั้นxและสุดท้าย Enterเพื่อบันทึกการเปลี่ยนแปลง )

และวางบรรทัดต่อไปนี้สำหรับ distros ที่ใช้เดเบียน (เช่น 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'

หรือสำหรับ distros 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.