คำถามติดแท็ก external-command

คำถามเกี่ยวกับการเรียกคำสั่งภายนอก (เชลล์) จากภายใน Vi หรือ Vim

9
วิธีรันคำสั่งเชลล์อย่างเงียบ ๆ ?
:!<command>สามารถใช้เพื่อรันคำสั่งในเชลล์ แต่นี่ "ใช้เวลา" terminal ของฉันและเติมด้วยstdoutคำสั่งเฉพาะที่ ฉันจะรันคำสั่งในพื้นหลังที่แจ้งให้ฉันทราบเฉพาะรหัสทางออกที่ไม่เป็นศูนย์ได้อย่างไร

4
ฉันจะรวม gdb กับ Vim ได้อย่างไร?
แทนที่จะเป็นgdbtuiหรือctrl+xใต้gdbซึ่งจะแสดงซอร์สโค้ดที่ด้านบนของหน้าจอฉันต้องการเห็นสิ่งนี้ในโปรแกรมแก้ไข Vim ที่จะข้ามไปมาระหว่างแท็บและบัฟเฟอร์ตามลำดับ ฉันจะทำสิ่งนี้ได้อย่างไร

4
จะใช้คำสั่งภายนอกใน Vim เพื่อแก้ไขคำและบรรทัดที่เลือกได้อย่างไร
สิ่งที่ฉันพบว่ามีประโยชน์ในบรรณาธิการอื่น ๆ คือความสามารถในการ: นำข้อความที่เลือก เรียกใช้คำสั่งภายนอกและส่งผ่านส่วนที่เลือกไปยัง stdin ใช้คำสั่งภายนอกstdoutและแทนที่ส่วนที่เลือกปัจจุบันด้วย วิธีนี้คุณสามารถเขียนเครื่องมือข้อความที่มีประโยชน์ซึ่งทำงานกับการเลือกโดยใช้ภาษาใดก็ได้ที่สามารถทำ io พื้นฐานได้ สิ่งนี้สามารถทำได้ด้วยเสียงเรียกเข้าโดยใช้การเลือก? ... อักขระเดี่ยวคำย่อหน้า ... ฯลฯ (โดยตรงในบรรทัดคำสั่งหรือผ่านการเชื่อมโยงคีย์?) บันทึก คำสั่งเช่น!sortทำงานในระดับบรรทัดเหตุผลที่ฉันถามคำถามนี้เพราะฉันต้องการที่จะดำเนินการในการเลือก (เช่นข้อความที่จะถูกลบหากxกด)

2
แยกผลลัพธ์ของคำสั่งเชลล์ไปยังตัวแปรในไฟล์. vimrc หรือไม่
ในไฟล์. vimrc ของฉันฉันต้องการเก็บไว้ในตัวแปรผลลัพธ์ของคำสั่งภายนอกในกรณีของฉัน: $ echo $LANG ดังนั้นvimrcไฟล์ของฉันจะมี: let language = output(!echo $LANG) if language == 'en' nnoremap <somekey> <ohanotherkey!> end if จนถึงตอนนี้ฉันไม่สามารถหาวิธีการได้ ฉันพบว่าในโหมดคำสั่ง:read !echo $LANGจะแทรกเนื้อหาที่ฉันกำลังค้นหาในไฟล์ปัจจุบันของฉัน แต่ฉันไม่รู้วิธีเขียนลงในไฟล์ vimrc

2
ดำเนินการสคริปต์ทุบตีจากเป็นกลุ่ม
ฉันใช้เสียงเรียกเข้าสำหรับการเขียนสคริปต์ทุบตี บางครั้งสิ่งที่ฉันไม่ต้องการที่จะสร้างไฟล์ใหม่ทำให้มันปฏิบัติการได้ดำเนินการแล้วลบออก ฉันหมายถึงสคริปต์ที่จะใช้งานเพียงครั้งเดียว เช่นฉันเปิดเป็นกลุ่มและพิมพ์สิ่งนี้: #!/bin/bash ll | while read line do echo $line done ฉันไม่ได้บันทึกไฟล์นี้ฉันใช้ vim เพื่อทำให้ bash-scripting ง่ายขึ้น ฉันรู้ว่าฉันสามารถรันคำสั่ง bash ผ่าน!ในกลุ่ม แต่สิ่งที่เกี่ยวกับการดำเนินการทุกอย่างที่อยู่ในบัฟเฟอร์?

1
ฉันจะทำให้ gx รู้จัก URL แบบเต็มเป็นกลุ่มได้อย่างไร
โดยค่าเริ่มต้นถ้าบัฟเฟอร์ในกลุ่มมี URL เช่นhttp://www.google.com, gxในโหมดปกติจะเปิดเบราว์เซอร์ที่มี URL ที่ มันมีประโยชน์มาก อย่างไรก็ตามหาก URL มีพารามิเตอร์ URL (เช่นhttp://www.google.com/search?q=stuff) ดังนั้นพารามิเตอร์ URL จะไม่ได้รับ (เช่นเพิ่งhttp://www.google.com/searchเปิด) ฉันใช้ MacVim 7.4 patch 183 กับ Chrome เป็นเบราว์เซอร์หลัก (บน OS X 10.9) มีวิธีง่าย ๆ โดยมีการปรับแต่งน้อยที่สุดเพื่อให้gxรู้จัก URL เต็มหรือไม่?

3
ฉันสามารถออกเชลล์แบบโต้ตอบในหน้าต่าง Vim ได้หรือไม่?
ฉันรู้ว่าฉันสามารถ:!หรือ:r!ดำเนินการคำสั่งภายนอกและเลือกที่จะแทรกเอาต์พุตลงในข้อความ ฉันสามารถแสดงได้:!shและฉันจะวางไข่กระสุนที่จะมีชีวิตอยู่จนกว่าฉันจะออก - แต่ในขณะที่กระสุนทำงานอยู่ Vim คือ 'หลับ' และไม่สามารถเข้าถึงได้ ฉันต้องออกจากเปลือกหอยและวางไข่ใหม่ถ้าฉันต้องการกลับไปเป็นกลุ่มชั่วครู่ - ไม่มีประโยชน์มาก ฉันสามารถเข้าถึงเปลือกปลายตรงข้ามโดยระงับการเป็นกลุ่มที่มี^Zและจัดการงานที่เป็นกลุ่มผ่านbg, และfg jobsมันสมเหตุสมผลมากกว่า แต่ยุ่งยากในระยะยาว ฉันสามารถใช้Screenถ้ามันมีอยู่ (มักจะไม่) หรือเปิดหลายหน้าต่างของตัวจัดการหน้าต่างของฉัน (และ ssh เพื่อกำหนดเป้าหมายโฮสต์จากแต่ละหน้าต่างตามลำดับเพื่อให้ทั้งกลุ่มและเชลล์บนโฮสต์ระยะไกลยุ่งยากอีกครั้ง) มันจะเรียบร้อยถ้า Vim อนุญาตให้ฉันเปิดเซสชันของเชลล์และเก็บไว้พูดในหน้าต่าง (ภายใน) ของหน้าต่างหรืออนุญาตให้ฉันสลับไปมาและย้อนกลับ เป็นไปได้อย่างนี้ไหม?

2
ฉันจะเปลี่ยนหน้าจอเริ่มต้นหรือหน้าจออินโทรของ Vim ได้อย่างไร?
เมื่อฉันเริ่มเป็นกลุ่มโดยไม่มีไฟล์ฉันจะเห็นสิ่งนี้เสมอ: VIM - Vi IMproved version 7.4.580 by Bram Moolenaar et al. Vim is open source and freely distributable Become a registered Vim user! type :help register<Enter> for information type :q<Enter> to exit type :help<Enter> or <F1> for on-line help type :help version7<Enter> for version info ฉันจะเปลี่ยนสิ่งนี้ได้อย่างไร โดยเฉพาะฉันต้องการวางผลลัพธ์ของคำสั่งเชลล์ ( fortune) …

1
วิธีใช้ backtick-expansion เพื่อเติมอาร์กิวเมนต์
จากความช่วยเหลือ:help backtick-expansion: On Unix and a few other systems you can also use backticks for the file name argument, for example: :next `find . -name ver\\*.c -print` :view `ls -t *.patch \| head -n1` The backslashes before the star are required to prevent the shell from expanding "ver*.c" prior to …

3
เป็นไปได้หรือไม่ที่จะมีเอาท์พุตเป็น:! คำสั่งในการแยกมากกว่าทั้งหน้าต่าง?
หากฉันมีเซสชันเป็นกลุ่มที่มีสองแยกเมื่อฉันรัน:!คำสั่งผลลัพธ์จะปรากฏในหน้าต่างทั้งหมด เป็นไปได้หรือไม่ที่จะแสดงผลลัพธ์เฉพาะส่วนแบ่งที่ใช้งานอยู่

4
: อ่านหลังเคอร์เซอร์แทนที่จะเป็นหลังบรรทัด
ฉันใช้:r !uuidgenบ่อยครั้งเพื่อแทรก uuid ใหม่ลงในบัฟเฟอร์ ใช้งานได้ แต่โดยทั่วไปฉันพยายามแทรก uuid ระหว่างเครื่องหมายคำพูดและ:r !uuidgenพิมพ์ uuid ในบรรทัดใหม่ เพื่อแก้ไขปัญหานี้ฉันกำลังใช้ keymap ง่ายๆ: nnoremap <C-u> mm:r!uuidgen<CR>dW"_dd`mp มาโครนี้ตั้งเครื่องหมายmmแทรก uuid r!uuidgenลบ uuid ที่แทรกไว้dWลบบรรทัดพิเศษ"_ddกลับไปที่เครื่องหมายBACKTICKmและวาง uuid ในpที่สุด มีวิธีการ:rทางขวาหลังจากเคอร์เซอร์ที่ไม่มีมาโคร / การผูกคีย์ที่ทำให้การรีจิสเตอร์เสียหรือเปล่า?

3
ฉันจะนับคำในส่วนของไฟล์ได้อย่างไรโดยไม่ต้องปล่อย vim?
ฉันมีไฟล์ที่เต็มไปด้วยข้อความ (พูดว่า Markdown หรือ LaTeX) ฉันต้องการนับจำนวนคำในไฟล์นี้ ฉันรู้ว่าฉันสามารถทำได้:! wc -w %เพื่อรัน wc -w บนบัฟเฟอร์ปัจจุบัน และฉันรู้ว่าฉันสามารถดึงส่วนที่น่าสนใจไปลงทะเบียนชื่อ ฉันเดาว่าจะมีวิธีการส่งการลงทะเบียนที่มีชื่อไปยังระบบปฏิบัติการเพื่อใช้ในคำสั่งหรือไพพ์ แต่ฉันไม่สามารถหาได้ หรือมีวิธีที่ดีกว่าในการนับคำในการลงทะเบียน? กรณีการใช้งานของฉันคือฉันเขียนการเขียนโปรแกรมที่ไม่ใช่จำนวนมาก (บันทึกย่อ, วิทยานิพนธ์, ฯลฯ ) เป็นกลุ่มและฉันต้องการที่จะนับจำนวนคำที่ฉันได้เพิ่มลงในส่วนที่กำหนดของไฟล์ในระหว่างการแก้ไข เซสชั่น

3
ฉันจะรู้ได้อย่างไรว่าฉันอยู่ในเชลล์จากคำสั่ง vi: sh?
ใน vi ฉันจะได้รับ shell terminal พร้อม:shคำสั่ง และต่อมาฉันสามารถกลับไปที่ vi โดยexitเชลล์ แต่ถ้าฉันใช้เชลล์เทอร์มินัลเป็นเวลานานและฉันลืมไปว่าexitจะปิดอะไรหรือคืน vi ให้ฉัน มีวิธีการตรวจสอบว่าฉันจะกลับไปที่ vi หรือไม่? jobsหรือfgไม่ทำงาน

1
วิธีการแก้ไขบล็อกที่เลือกด้วยคำสั่งภายนอก?
ฉันมีไฟล์ที่ประกอบด้วยสองส่วนแนวตั้ง ด้านซ้ายมีการจัดรูปแบบข้อมูลแล้วและฉันไม่ต้องการเปลี่ยนแปลง ฉันต้องการจัดรูปแบบข้อมูลทางด้านขวาเท่านั้น บอกว่าฉันมีไฟล์ที่มีเส้นเหมือนกัน foo=bar baz # Neato Junk quux=xyzzy # Bilbo Baggins Ring มีอีกหลายบรรทัดเช่นนั้น ฉันต้องการแก้ไขข้อความทางด้านขวาของอักขระ '#' เท่านั้น ฉันเลือกข้อความที่ฉันต้องการด้วยนิพจน์ต่อไปนี้: gg /# ctrl-v G $ แต่ถ้าฉันลองปรับเปลี่ยน (พูดด้วย:'<,'>!column -t) จริง ๆ แล้วมันจะปรับเปลี่ยนทั้งหมดของทุกบรรทัด นิพจน์ที่ถูกต้องที่ใช้เพื่อแก้ไขเฉพาะส่วนที่มองเห็นคืออะไร

1
กำหนดคำสั่งที่กำหนดเองสำหรับการลงทะเบียน * และ +
หากฉันใช้ build Vim พร้อมxterm_clipboardฟีเจอร์เนื้อหาคลิปบอร์ดของระบบจะพร้อมใช้งานผ่านการ+ลงทะเบียน หากบิลด์ที่ฉันใช้อยู่ไม่มีคุณสมบัตินี้ฉันจะทำให้การ"+ลงทะเบียนเรียกโปรแกรมที่กำหนดเองของฉันเพื่อดึงข้อมูลและตั้งค่าคลิปบอร์ดของระบบ ( xsel -boและxsel -biหรือด้วยxclipหรือไม่) ในทำนองเดียวกันกับ"*ที่จะเรียกและxsel -poxsel -pi ประเด็นคือสามารถพิมพ์สิ่งที่ชอบ"+pโดยไม่ต้องกังวลว่าคุณลักษณะนั้นจะพร้อมใช้งานหรือไม่ พิมพ์ดีด:r !xsel -b<Enter>ไม่ได้เป็นสิ่งที่ฉันกำลังมองหา: ฉันต้องการการกดแป้นพิมพ์เดียวกันในการทำงานและฉันต้องการวางสายพันธุ์ที่จะทำตามสิ่งที่มีอยู่สำหรับการลงทะเบียน“จริง” ( P, gp, ... ) โบนัส: ฉันสามารถกำหนดคำสั่งที่กำหนดเองสำหรับชื่อการลงทะเบียนอื่น ๆ ได้หรือไม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.