เน้นไวยากรณ์ในเทอร์มินัล


43

บรรณาธิการที่เน้นการเขียนโปรแกรมจำนวนมากจะเปลี่ยนสีซอร์สโค้ด มีคำสั่งที่จะ colorize ซอร์สโค้ดสำหรับการดูใน terminal หรือไม่?

ฉันสามารถเปิดไฟล์ที่มีemacs -nw(ซึ่งจะเปิดใน terminal แทน popping ขึ้นหน้าต่างใหม่) แต่ฉันกำลังมองหาบางสิ่งบางอย่างที่ทำงานเช่นless(หรืองานที่มี less -Rซึ่งผ่านลำดับหนีสีในการป้อนข้อมูลของมัน)

คำตอบ:


66

ด้วยhighlightเทอร์มินัลที่รองรับลำดับ escape สีเดียวกับxterm:

highlight -O xterm256 your-file | less -R

ด้วยruby-rouge:

rougify your-file | less -R

ด้วยpython-pygments:

pygmentize your-file | less -R

ด้วยGNUsource-highlight :

source-highlight -f esc256 -i your-file | less -R

นอกจากนี้คุณยังสามารถใช้vimเป็นเพจเจอร์ด้วยความช่วยเหลือของmacros/less.shสคริปต์มาพร้อมกับvim(ดูรายละเอียด:h lessภายในvim):

ในระบบของฉัน:

sh /usr/share/vim/vim74/macros/less.sh your-file

หรือคุณอาจใช้ปากกาเน้นข้อความไวยากรณ์ใด ๆ ที่สนับสนุนเอาต์พุต HTML และใช้elinksหรือw3mเป็นเพจเจอร์ (หรือelinks -dump -dump-color-mode 3 | less -R) เช่นเดียวกับGNUsource-highlight :

source-highlight -o STDOUT -i your-file | elinks -dump -dump-color-mode 3 | less -R

ไฮไลต์สามารถแปลงข้อความเป็น SVG / HTML ซึ่งน่าตื่นเต้นมาก
utopic eexpress

14

ฉันใช้ GNU source-highlightร่วมกับless -Rสิ่งนี้ เพิ่มบรรทัดต่อไปนี้ลงในไฟล์เริ่มต้นของเชลล์ ( ~/.bashrcเช่น):

cless(){
 LESSOPEN='| source-highlight --failsafe --out-format=esc256 -o STDOUT -i %s 2>/dev/null ' less -R "$@"
}

นั่นควรจะใส่รหัสสีตามภาษาที่ใช้โดยอัตโนมัติและหากไม่สามารถทำได้ก็จะเปิดตัวlessในอินพุตโดยตรง


6

หากคุณกำลังสนใจในสีlessอื่น ๆ lesspipe.shโดยทั่วไปคุณอาจต้องการที่จะมองไปที่ ดูตัวอย่างเช่นhttp://freecode.com/projects/lesspipe

lesspipe.sh เป็นตัวกรองอินพุตสำหรับเพจเจอร์น้อยตามที่อธิบายไว้ใน man page ของ less สคริปต์ทำงานภายใต้เชลล์ที่เข้ากันได้กับ ksh (เช่น bash, zsh) และช่วยให้คุณใช้งานน้อยลงในการดูไฟล์ที่มีเนื้อหาไบนารีไฟล์บีบอัดไฟล์เก็บถาวรและไฟล์ที่อยู่ในคลังข้อมูล

นอกจากนี้ยังจะทำให้ color shell เชลล์สคริปต์ perl และอื่น ๆ คล้ายกับ text editor โดยไม่ต้องใช้โปรแกรม "preprocessing" ใด ๆ ในการทำ colorizing


ขอบคุณ! ฉันคิดว่าlesspipe.shเป็นสิ่งที่ฉันพยายามจะจำก่อนที่ฉันจะโพสต์คำถาม ...
alexis

2

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

ตรวจสอบไวยากรณ์แม่มดไฮไลต์ที่มีอยู่: ls -la /usr/share/nano/

รวมไว้ในไฟล์ nanorc ของฉันด้วยคำสั่งดังต่อไปนี้หรือโดยการทำมันด้วยตนเอง

echo 'include /usr/share/nano/sh.nanorc' >> ~/.nanorc

เกี่ยวกับlessฉันขอแนะนำให้ดูที่หน้านี้


0

ตามคำแนะนำของStéphane Chazelasฉันสร้างฟังก์ชั่นทุบตีเพื่อใช้การhighlightแสดงไฮไลต์ไวยากรณ์ใส่ลงใน. bashrc หรืออื่น ๆ มันใช้งานได้ดีรวดเร็วและมีประสิทธิภาพ

s(){ highlight --force -O ansi $1 | /usr/bin/less -R; }

ไฮไลท์การสนับสนุนรูปแบบไวยากรณ์ 202 ภาษา เห็นhighlight --list-scripts=langsไหม


0

คุณสามารถใช้แพคเกจ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จำหน่ายรุ่นโบราณ โชคดีที่มันง่ายที่จะสร้างเวอร์ชั่นที่ทันสมัยโดยตรงจากแหล่งที่มา


-2

มันเรียกว่าการเน้นไวยากรณ์

GNU Source-highlightเมื่อให้ไฟล์ต้นฉบับสร้างเอกสารที่มีการเน้นไวยากรณ์

ฉันใช้lessfilterสคริปต์ด้านล่างหรือคุณสามารถlessเรียกใช้โดยอัตโนมัติเช่น:

export LESSOPEN="| /path/to/lessfilter %s"
export LESS=' -R '

ฉันพบบทความนี้และเริ่มทำเช่นนี้:

#!/bin/sh
file -b -L "$1" | grep -q text &&
  /usr/share/source-highlight/src-hilite-lesspipe.sh "$1"

( src-hilite-lesspipe.shมาพร้อมกับsource-highlightแต่ไม่รวมถึงการแจกจ่ายทั้งหมด)


4
"ถ้าคุณไปที่บทความผู้เขียนจะต้องใช้ Mac เพราะเขาใช้ตัวพิมพ์ใหญ่สำหรับคำสั่งของเขา": ฉันกลัวว่าคุณจะสับสนเล็กน้อย: เห็นได้ชัดว่าคุณไม่ทราบว่าexportกำหนดตัวแปรสภาพแวดล้อมไม่ใช่นามแฝง คำสั่ง lessใช้ธงจากตัวแปรสภาพแวดล้อมLESSดังนั้นคำตอบของคุณต้องทำงานบาง
alexis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.