เปิดเอาต์พุตของคำสั่งเชลล์ในบานหน้าต่างแยก


23

พิจารณาภาษาการเขียนโปรแกรมตีความใด ๆ

ฉันสามารถเรียกใช้สคริปต์ที่เปิดอยู่ในปัจจุบันโดยใช้! interpreter %และใช้คีย์ส่งคืนเพื่อกลับไปเป็นกลุ่มหลังจากการดำเนินการเสร็จสิ้น

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

ฉันพยายาม:split ! interpreter %แต่มันใช้งานไม่ได้

มีวิธีหรือไม่? ฉันใช้กลุ่ม 7.3

คำตอบ:


29

ด้วย:!คำสั่งภายนอกจะดำเนินการในเปลือกและเอาท์พุทหายวับไปไม่ได้จับภายใน Vim; คุณเพิ่งเห็นสิ่งที่ถูกพิมพ์ไปยังเทอร์มินัลจากนั้นการควบคุมจะกลับไปเป็นกลุ่มหลังจากคำสั่งภายนอกเสร็จสิ้น

เพื่อให้ผลลัพธ์ที่คุณต้องอ่านมันเป็นกลุ่มบัฟเฟอร์ เพื่อที่จะมี:read!คำสั่ง ที่จะเปิดใหม่รอยขีดข่วนบัฟเฟอร์รวมนี้กับ:new:

:new | 0read ! <command>

หากคุณต้องการส่งชื่อไฟล์บัฟเฟอร์ปัจจุบัน ( %) ไปยังคำสั่งภายนอกคุณต้องใช้:executeเพื่อที่จะได้รับการประเมินในบัฟเฟอร์ปัจจุบันแล้ว:

:execute 'new | 0read ! interpreter' expand('%')

หรือคุณใช้ความจริงที่ว่าด้วยบัฟเฟอร์ใหม่อันก่อนหน้าจะกลายเป็นบัฟเฟอร์สำรองและใช้#แทน%:

:new | 0read ! interpreter #

:bdelete!ได้รับการกำจัดของบัฟเฟอร์รอยขีดข่วนด้วย

หากคุณต้องการเห็นผลลัพธ์แบบอะซิงโครนัสในขณะที่ดำเนินการคุณต้องมีมัลติเพล็กเซอร์หรือปลั๊กอินตามที่ระบุไว้ใน @chaos คำตอบ


คำสั่ง ": execute ... " ด้านบนใช้งานได้สำหรับฉัน แต่เมื่อฉันพยายามผูกมันกับการกดแป้น F9 ให้ใช้รายการ. vimrc นี้ [nnoremap <buffer> <F9>: execute 'new | 0 อ่าน! / usr / bin / env python3 'expand ('% ')], ฉันได้รับข้อผิดพลาดต่อไปนี้: [/ bin / bash: -c: บรรทัด 0: EOF ที่ไม่คาดคิดขณะค้นหาการจับคู่' '' expand ('%' )] ฉันลองใช้ลำดับการหลบหลีกหลายครั้ง แต่ฉันคิดว่าไม่ใช่ลำดับที่ถูกต้อง = :) ความคิดใด ๆ ขอขอบคุณ.
NYCeyes

2

เท่าที่ฉันรู้คุณไม่สามารถทำเช่นนั้นvimได้ แต่ใช้ terminal multiplexer เช่นscreenนี้ ก่อนที่จะเปิดเป็นกลุ่มให้เริ่มมัลติเพล็กเซอร์:

screen

จากนั้นกดctrl- a Sสำหรับ horitzontal และctrl- a |สำหรับหน้าจอที่หกในแนวตั้ง

ตอนนี้เปิดไฟล์vimในหนึ่งในหน้าจอแยก และข้ามไปยังหน้าจออื่น ๆ ที่ใช้-ctrl a tabโปรดสังเกตว่าในหน้าจอที่สองคุณต้องเปิดหน้าจอใหม่ก่อน( ctrl- a c) ก่อนจึงจะสามารถใช้งานได้

ในหน้าจอที่มีกลุ่มที่คุณสามารถแก้ไขไฟล์และในหน้าจออื่น ๆ ที่คุณสามารถดำเนินการได้และดูข้อความและรหัสอย่างถาวร

นี่คือการอ้างอิงอย่างรวดเร็วscreenสำหรับ


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