ไปป์ไลน์น้อยลงและการแก้ไข: ข้อผิดพลาด“ ไม่สามารถแก้ไขอินพุตมาตรฐาน” วิธีการแก้ปัญหา?


9

ฉันเพิ่งเรียนรู้ว่าถ้าฉันหน้าไฟล์ของฉันด้วยlessฉันสามารถกดvและเปิดบัฟเฟอร์ใน Emacs สิ่งนี้ทำงานได้ตราบใดที่ฉันมีการ$EDITORตั้งค่าตัวแปรสภาพแวดล้อมอย่างถูกต้องซึ่งในกรณีของฉันฉันมี:

export EDITOR='env TERM=xterm-256color emacs -nw'

ด้านบนทำให้ฉันสามารถโหลด emacs ภายในเทอร์มินัลที่ทำงานlessได้

แต่เคล็ดลับดังกล่าวข้างต้นไม่ทำงานเมื่อท่อlessคำสั่งไปยัง เมื่อทำเช่นนี้lessบ่นกับข้อความต่อไปนี้:

Cannot edit standard input (press RETURN)

คำถามของฉันคือทำไมสิ่งนี้เกิดขึ้น? แต่ที่สำคัญที่สุดมีวิธีแก้ไขหรือไม่


2
คุณควรเรียนรู้วิธีใช้emacsclientซึ่งจะช่วยให้คุณแก้ไขไฟล์ในสำเนา Emacs ที่รันอยู่แล้ว Emacs ไม่ใช่เครื่องมือแก้ไขที่เริ่มต้นเร็วที่สุด
cjm

ทำไมคุณย้อนกลับการแก้ไขของฉัน ชื่อควรจะเป็นคำถามหรือไม่?
จอห์น

1
ขออภัย @John ฉันไม่เห็นการแก้ไขของคุณ ฉันแก้ไขชื่อเพื่อชี้แจงว่าฉันสนใจการแก้ไขปัญหาเป็นส่วนใหญ่ ฉันคิดว่าชื่อเรื่องมันPiping into less and editing: “cannot edit standard input” error. Workarounds?ชัดเจน ทำไมต้องคิดอย่างอื่น
Amelio Vazquez-Reina

นั่นเป็นที่เข้าใจ แม้ว่าฉันจะสมมติว่าหากคุณถามว่าทำไมคุณถึงได้รับข้อผิดพลาดควรเห็นได้ชัดว่าคุณต้องการวิธีแก้ปัญหา
จอห์น

ฉันเห็นด้วยถึงแม้ว่าคำตอบที่ได้รับการโหวตมากที่สุดคือที่อยู่whyเพียงอย่างเดียวและไม่ใช่คำตอบworkaroundsดังนั้นฉันจึงเพิ่มความสำคัญ
Amelio Vazquez-Reina

คำตอบ:


5

ตามที่ได้กล่าวไปแล้วคุณไม่สามารถแก้ไขสตรีมอินพุตได้

วิธีแก้ปัญหาค่อนข้างชัดเจน: บันทึกสตรีมไปยังไฟล์จากภายในlessและเปิดไฟล์ที่บันทึกไว้ ในการทำเช่นนั้นในขณะที่กำลังดูอยู่ให้กดsและตั้งชื่อไฟล์ จากนั้นออกlessและเปิดไฟล์ด้วยมือหรือจากภายในlessพิมพ์:eและตั้งชื่อไฟล์ที่คุณเพิ่งบันทึก


15

วิธีแก้ปัญหาที่ดีคือไปป์เอาต์พุตจากน้อยไปยังบรรณาธิการของคุณเช่นหลังจาก "echo foo | less" คุณสามารถทำได้:

g|$vim -

gจะข้ามไปที่บรรทัดแรกของไฟล์ / อินพุต|จะเรียกการกระทำ "pipe" $คือเครื่องหมาย ("จุดสิ้นสุด") ตามด้วยคำสั่งเพื่อไพพ์ช่วงเข้าสู่ ( vim -ในกรณีนี้ซึ่ง "-" หมายถึง เพื่ออ่านอินพุตจาก stdin)


1
เยี่ยมมากขอบคุณ!
Simon Pickup

5

มันมีความหมายตรงตามที่กล่าวไว้ - คุณสามารถแก้ไขไฟล์ที่อยู่บนดิสก์ด้วยวิธีนี้ (จากless) หากคุณประปาผลผลิตของกระบวนการของมันSTDOUTเป็นไปในSTDINสำหรับless; ไม่มีไฟล์ที่จะแก้ไข

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