Zsh: แก้ไขคำสั่งที่ดำเนินการโดยอัตโนมัติ


9

ฉันเพิ่งติดตั้ง grc (colorizer ทั่วไป) ไปยังระบบของฉันผ่าน MacPorts ทำให้ฉันมีความสามารถในการรับเอาต์พุต colorized สำหรับคำสั่งมากมายซึ่งโดยค่าเริ่มต้นไม่รองรับ (ดูภาพด้านล่าง) ตัวอย่างของ grc กับ traceroute
ฉันต้องการใช้ grc แบบอัตโนมัติ แต่ไม่ใช่สำหรับคำสั่งเฉพาะ แต่สำหรับทุกคำสั่ง ฉันใช้ zsh เป็นเปลือกของฉัน

โดยเฉพาะอย่างยิ่งเมื่อใดก็ตามที่ผมดำเนินการผมอยากให้มีการดำเนินการโดยอัตโนมัติเป็นcommand -parameter 1 2 3 ฉันไม่ได้ต้องการใช้นามแฝงเช่นนามแฝงถึงเนื่องจากฉันกำลังเพิ่มคำสั่งเพิ่มเติมเพื่อให้ grc เปลี่ยนสีgrc command -parameter 1 2 3
traceroutegrc traceroute

ฉันดูการกำหนดค่า preexec และ precmd สำหรับ. zshrc แต่ฉันไม่พบวิธีที่จะบรรลุสิ่งที่ฉันกำลังมองหา

คำตอบ:


6

คุณสามารถทำได้โดยกำหนดวิดเจ็ต accept-line ใหม่:

add-grc() { [[ $BUFFER = grc* ]] || BUFFER="grc $BUFFER"; zle .$WIDGET "$@"; }
zle -N accept-line add-grc

อย่างไรก็ตามอาจทำให้เกิดปัญหาสำหรับคำสั่งเช่น "for i (.. )", "var = x", "f () {" ...


จุดดี. ฉันไม่คิดว่าจะมีปัญหาใด ๆ ที่โซลูชันนี้สามารถสร้างตัวเอง แต่คุณอยู่ในนามนี้ ขอขอบคุณสำหรับเวลาของคุณ.
นิตย์

หนึ่งข้อเสียเปรียบด้วยวิธีนี้คือประวัติจะแสดงgrcที่จุดเริ่มต้นของทุกคำสั่ง
joeytwiddle

6

ทางเลือกอื่น ๆ ปัญหาที่อาจเกิดขึ้นแบบเดียวกัน:

TRAPDEBUG() { eval "grc $ZSH_DEBUG_CMD"; setopt errexit; }

ฉันจะใช้ "นามแฝง" สำหรับทุกคำสั่งที่ต้องการ "grc" แทนที่จะพยายามหาข้อยกเว้นสำหรับวิธีแก้ปัญหาที่โพสต์ที่นี่


3

พิจารณาใช้grc.zshว่าเป็นส่วนหนึ่งของgrcซึ่งสามารถพบได้ที่นี่ มันมีชื่อแทนสำหรับคำสั่งที่รองรับทั้งหมด
ดูคำตอบ Stackoverflowนี้

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