วิธีรันคำสั่ง Vim จากเชลล์?


12

นี่อาจเป็นคำถามที่โง่ แต่อดทนกับฉัน

ฉันกำลังทำสิ่งปกติที่ฉันทำโดยอัตโนมัติเมื่อตั้งค่าสภาพแวดล้อมการทำงานใหม่และต้องการทำให้คำสั่ง Vim เป็นแบบอัตโนมัติ:BundleInstall(สำหรับการติดตั้งปลั๊กอิน Vim ทั้งหมดของฉัน)

เป็นไปได้ไหมที่เรียกใช้จากเชลล์?

หรือเป็นไปได้ที่สคริปต์จะเรียกใช้ Vim, รัน:BundleInstall, รอจนกว่าจะเสร็จสิ้นและออกจากระบบ?

ขอบคุณ

คำตอบ:


14

จากvim(1)หน้าคน:

+ {} คำสั่ง

-c {command}

{command} จะถูกดำเนินการหลังจากอ่านไฟล์แรกแล้ว {command} ถูกตีความว่าเป็นคำสั่ง Ex หากคำสั่ง {} มีช่องว่างจะต้องอยู่ในเครื่องหมายคำพูดคู่ (ขึ้นอยู่กับเชลล์ที่ใช้) ตัวอย่าง: Vim "+ set si" main.c

หมายเหตุ: คุณสามารถใช้คำสั่งได้ถึง 10 "+" หรือ "-c"


3
ขอบคุณ! ฉันรู้ว่าฉันรู้สึกงี่เง่า ... : - / รับใช้ฉันด้วยการไม่อ่าน manpage ให้ละเอียด vim +BundleInstall +qall!ฉันสิ้นสุดการใช้
imiric

4

คุณสามารถรันคำสั่งของคุณเช่นนี้:

vim -E -c BundleInstall -c q

ซึ่งจะหลีกเลี่ยงการเปิดหน้าต่างเป็นกลุ่มในเทอร์มินัลของคุณ

หมายเหตุ:คำตอบแรกของฉันรวมถึง-sตัวเลือกที่ฉันต้องการสำหรับแอปพลิเคชันอื่น แต่ไม่ถูกต้องที่นี่เพราะมันป้องกันไม่ให้มีการติดยาเสพติดอย่างมากของ Vim รวมถึงการจัดหาปลั๊กอินที่กำหนดBundleInstallคำสั่ง


1
ขอบคุณ แต่ด้วยเหตุผลบางอย่างมันไม่ทำงานสำหรับฉัน
imiric

1
ตอนนี้ฉันเห็นว่าทำไม ฉันลืมที่-sทำมากกว่าการยับยั้งข้อความบางอย่าง - มันยังยับยั้งการสร้างความไม่เข้าใจด้วย - ดังนั้นคำจำกัดความของ BundleInstall ไม่ได้มีที่มา วิธีหนึ่งในการแก้ไขปัญหาที่จะเพิ่มตัวเลือกเช่นนี้มาก่อนครั้งแรก:-c --cmd 'runtime plugin/bundle.vim'แก้ไขชื่อไฟล์นั้นให้เหมาะสม :help -s-exดู
garyjohn

2

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


0

สำหรับสถานการณ์ที่คุณต้องการให้กลุ่มโหลดเต็มเช่นเดียวกับที่คุณเริ่มด้วยตนเองการทำงานนี้:

vim -c "autocmd! CursorHold * <commands to run>"

ตัวอย่างเช่นฉันต้องการเปลี่ยนเส้นทางการส่งออก:mapไปยังไฟล์จากเชลล์ แต่ฉันต้องการจับภาพการจับคู่ที่vim-airlineสร้างขึ้นหลังจากที่มันแสดงตารางของมันเท่านั้น (บรรทัดที่ด้านบนแสดงบัฟเฟอร์ทั้งหมดที่เปิด) เพราะดูเหมือนว่าจะทำ แบบอะซิงโครนัสเพียงแค่เรียกใช้การ-cเปลี่ยนเส้นทางไปยังไฟล์ไม่ได้ให้เวลาในการทำการแมป อาจเป็นวิธีที่ดีกว่า แต่วิธีนี้ใช้ได้ผลกับฉันโดยเฉพาะเมื่อฉันupdatetimeตั้งไว้ที่100(0.1 วินาที) ซึ่งมีผลต่อระยะเวลาจนกว่าCursorHoldเหตุการณ์จะเริ่มขึ้น โดยค่าเริ่มต้น vim ตั้งค่าเป็น 4 วินาที

vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.