แทรกเอาต์พุตของคำสั่งระบบที่ตำแหน่งปัจจุบันเป็นกลุ่ม


33

ในกลุ่มเมื่อฉันใช้

:r !ls somefilename

มันแทรกเอาท์พุทของคำสั่งนั้นในบรรทัดใหม่ด้านล่างบรรทัดปัจจุบัน

ถ้าฉันทำ

let @a = system("ls")

และหลังจากนั้น

"ap

มันยังคงแทรกเอาท์พุทในบรรทัดใหม่ด้านล่างบรรทัดปัจจุบัน

มีวิธีทำ vim insert output ที่ตำแหน่งปัจจุบันหรือไม่?


อ้างถึงคำตอบที่เป็นประโยชน์นี้ดำเนินการบรรทัดปัจจุบันเป็น bash จากกลุ่ม
Rohan Ghige

คำตอบ:


14

คุณสามารถวางเนื้อหาของบัฟเฟอร์คลิปบอร์ดระหว่างตัวละครด้วย Ctrl-R * ในโหมดแทรก (และวิธีการที่คล้ายกันสำหรับบัฟเฟอร์อื่น ๆ ) ดังนั้นหากคุณสามารถรับคำสั่งระบบเป็นบัฟเฟอร์คุณควรตั้งค่า (ที่มา: https://stackoverflow.com/questions/1491135/paste-multi-line-string-into-gvim-at-cursor-position )

:let @a=system("ls -l")จะทำให้การส่งออกของลงในทะเบียนls -l aจากนั้นคุณสามารถวางไว้ (ในโหมดแทรก) ^R-aด้วย


นอกจากนี้บนแพลตฟอร์มส่วนใหญ่คลิปบอร์ดจะถูกซิงค์กับการลงทะเบียน (ปกติ*) ดังนั้นหากคุณไพพ์เอาท์พุทคำสั่งของคุณไปยังคลิปบอร์ดของคุณมันจะอยู่ใน"*เพื่อให้คุณใช้
Bruno Bronosky

39
:r !command 

จะอ่านเอาต์พุตจากคำสั่งและแทรกลงในบรรทัดภายใต้บรรทัดปัจจุบัน นี่คือวิธีการตั้งโปรแกรมให้ vi คุณไม่สามารถเปลี่ยนพฤติกรรมได้

แต่บอกว่าถ้าคุณอยู่ในหมายเลขบรรทัด 3. :r !dateถ้าคุณพยายาม มันจะแทรกค่าวันที่ลงในหมายเลขบรรทัด 4

หากคุณต้องการให้ค่าวันที่ปรากฏในบรรทัดที่ 3 คุณ:2r !dateจะลองใส่ค่าวันที่ในบรรทัดที่ 3


4
ที่แทรกอยู่ในบรรทัดที่แตกต่างกัน แต่ยังคงอยู่ในบรรทัดของตัวเอง ฉันต้องการแทรกที่ตำแหน่งปัจจุบัน!
deshmukh

13

นี่คือวิธีอื่นในการวางเอาต์พุตจากคำสั่งภายนอกก่อนเคอร์เซอร์:

:exe 'norm i' . system("ls -l")

หรือใช้ expression register ( :help @=):

"=system('ls -la')

Pแล้วตี หรือวิธีที่สั้นกว่าโดย:

<CTRL-R>=system('ls -la')<CR>

4
นี่คือคำตอบ
จาค็อบ

1
ตกลงกัน! นี่ควรเป็นคำตอบที่ถูกต้องเพราะมันมีวิธีแก้ปัญหาเชิงโปรแกรมเพิ่มเติม (พร้อม:exe) ซึ่งสามารถรวมอยู่ในคำสั่ง
metasoarous
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.