Vi & Vim

คำถามและคำตอบสำหรับผู้ที่ใช้ตระกูล vi และ Vim ของเครื่องมือแก้ไขข้อความ

2
ฉันจะทำให้ ctrlp ทำการจับคู่ชื่อไฟล์ได้ดีขึ้นได้อย่างไร
โครงการของฉันมีไฟล์เหล่านี้: $ find . -type f -and -name 'peop*' ./app/assets/stylesheets/admin/sections/people.css.sass ./app/controllers/admin/people_controller.rb เมื่อฉันเบื่อที่จะพิมพ์:e app/assets/stylesheets/admin/sections/people.css.sassฉันคิดว่าctrlpอาจเป็นวิธีที่ดีในการบันทึกการพิมพ์ อย่างไรก็ตามฉันไม่สามารถจับคู่ไฟล์ในสิ่งที่ฉันคิดว่ามีเหตุผล ก่อนอื่นฉันใช้<C-p>และพิมพ์peopและนั่นทำให้ผลลัพธ์เหล่านี้ (การจับคู่ "ครั้งแรก" อยู่ที่ด้านล่าง): > app/models/attribute_group.rb > app/models/contract_template.rb > app/policies/contract_policy.rb > app/uploaders/photo_uploader.rb > app/policies/invoice_policy.rb > app/views/layouts/pdf.pdf.haml > app/uploaders/logo_uploader.rb > app/models/property_object.rb > app/policies/person_policy.rb > app/policies/photo_policy.rb >>> peop_ ผลลัพธ์เหล่านี้น่ากลัว ไม่มีไฟล์peopอยู่ในนั้น แม้ว่าฉันจะขยายเป็นpeople: > app/policies/contract_template_policy.rb > app/models/concerns/exportable.rb > app/models/contract_template.rb > …

5
วิธีการเปิดหลายไฟล์ที่ตรงกับนิพจน์ตัวแทน?
ฉันต้องการแก้ไขไฟล์หลายไฟล์ที่ตรงกับนิพจน์ glob ตัวอย่างเช่นหากต้องการแก้ไขไฟล์ git config ทั้งหมดในไดเรกทอรีลูกฉันสามารถทำได้ในเชลล์: vim */.git/config ที่เป็นกลุ่ม:บรรทัดคำสั่งที่ฉันคาดหวัง:find */.git/configที่จะทำบางสิ่งบางอย่างที่คล้ายกัน (เช่นเปิดไฟล์ทั้งหมดที่ตรงกับการแสดงออก glob) E77: Too many file namesแต่แทนที่จะบ่น มีคำสั่งเป็นกลุ่มหรือหนึ่งซับเพื่อเปิดหลายไฟล์ที่ตรงกับการแสดงออก wildcard / glob (ที่ไม่เกี่ยวข้องกับการเขียนฟังก์ชั่น)?

3
เช่นเดียวกับ Ctrl-A และ Ctrl-X แต่ปรับเปลี่ยนเฉพาะตัวเลขตัวแรก
มีวิธีเพิ่ม / ลดดิจิตแรกหลัง / ภายใต้เคอร์เซอร์ไม่ใช่จำนวนเต็มหรือไม่ ฉันรู้ว่ามันไม่ทำงานเป็นกลุ่ม แต่มีปลั๊กอินที่ทำอย่างนั้น? ฉันหามันไม่เจอ มันมีประโยชน์มากเมื่อแก้ไข css และในกรณีอื่นด้วย ได้รับ: ▐margin: 10px เมื่อฉันกดCTRL-Aฉันต้องการดู: ▐margin: 20px จริง: ▐margin: 11px

1
ฉันจะเปิดไฟล์เพื่อดูในแท็บใหม่ได้อย่างไร
ฉันจะเปิดไฟล์เพื่อดูในแท็บใหม่ได้อย่างไร :tabe[dit] <filename>โดยเฉพาะฉันต้องการอ่านอย่างเดียวเทียบเท่า ฉันเหนื่อย :tab :view <filename> แต่นั่นไม่ได้สร้างแท็บใหม่ตามที่เอกสารแนะนำ

2
วิธีที่มีประสิทธิภาพมากที่สุดในการแทนที่บัฟเฟอร์ทั้งหมดหรือไม่
ขณะนี้ฉันมีสองวิธีที่คล้ายกันเพื่อแทนที่บัฟเฟอร์ทั้งหมดด้วยข้อความอื่น ๆ (พูดในคลิปบอร์ด) วิธีที่ # 1: ลบทุกบรรทัด: :%d. วางข้อความ: "+P(หรือคล้ายกัน: :put+) วิธีที่ # 2: ggVGสายตาเลือกเส้นทั้งหมด: "+Pวางข้อความ: อย่างไรก็ตามฉันไม่สามารถหาทางสั่งไฟได้ สิ่งที่ใกล้เคียงที่สุดที่ฉันพบคือ:changeคำสั่ง แต่ดูเหมือนว่าจะทำงานได้ดีกับการลงทะเบียน แน่นอนฉันสามารถสร้างฟังก์ชั่นและ / หรือแมปคีย์เพื่อทำสิ่งนั้น แต่ก่อนที่ฉันจะทำการปรับแต่งเหล่านี้ทั้งหมดฉันต้องการตรวจสอบให้แน่ใจ: มีคำสั่งในตัวเพื่อแทนที่ช่วงของบรรทัดด้วยข้อความอื่น ๆ หรือไม่? เช่นคุณสามารถ:%replace+แทนที่บัฟเฟอร์ทั้งหมดด้วยข้อความในคลิปบอร์ด?

1
ฉันจะหยุด Vim ไม่ให้เขียนไฟล์โดยไม่เกิดข้อผิดพลาดได้อย่างไร
ฉันพยายามปรับปรุงรหัสจากคำตอบนี้เพื่อขอการยืนยันก่อนสร้างไดเรกทอรีที่ขาดหายไปนี่คือสิ่งที่ฉันเขียน: function! CreateDirectoryAskConfirmation(path) if !isdirectory(a:path) echohl Question echo "Create directory " . a:path . "?" echohl None let response = nr2char(getchar()) if response ==? "y" call mkdir(a:path, "p") endif endif endfunction autocmd BufWritePre * call CreateDirectoryAskConfirmation(expand("<afile>:p:h")) สิ่งหนึ่งที่ฉันหายไป: เมื่อฉันไม่กดyที่พรอมต์ฉันต้องการให้ Vim ยกเลิกการเขียนดังนั้นฉันจึงไม่ได้รับข้อผิดพลาดE212: Can't open file for writingและฉันไม่จำเป็นต้องกดปุ่มอื่นเพื่อให้ข้อความแสดงข้อผิดพลาดหายไป มีวิธีที่จะบรรลุเป้าหมายนี้หรือไม่?
10 save  autocmd  error 

2
ฉันจะติดตั้ง. vimball plugin ได้อย่างไร
ฉันได้รับปลั๊กอินสำหรับ Vim .vimballมันเข้ามาในสิ่งที่เรียกว่า ฉันตั้งใจจะทำอะไรกับสิ่งนี้อย่างแน่นอน? ฉันจะวางไว้ที่ไหน ฉันต้องรูทเพื่อติดตั้งหรือไม่

1
มี <Cw> สำหรับ WORD หรือไม่
การกดCtrl- wในโหมดแทรกจะลบคำก่อนหน้า มันเทียบเท่ากับCtrl- Backspaceใน Windows และOpt- Deleteใน OS X และพิมพ์ได้เร็วขึ้นจริงๆ เป็นกลุ่มมีแนวคิดที่แยกต่างหากของwordและWORD(ดู:help word) นี้เป็นสิ่งล้ำค่าสำหรับการนำทางข้อความ: มันเป็นความแตกต่างระหว่างwและW, bและB, และอื่น ๆ Ctrl- ดำเนินการเกี่ยวกับw wordมีคำแนะนำที่คล้ายกันWORDหรือไม่?

1
เยื้องการเรียกใช้จาวาสคริปต์อย่างไม่ถูกต้อง
ตัวอย่างเช่นถ้าฉันมีรหัส JavaScript เช่นนี้: var widget = library() .chainCall1() .chainCall2() .chainCall3(); ถ้าฉันใช้=คำสั่งเพื่อเยื้องมันจะออกมาดูสิ่งนี้: var widget = library() .chainCall1() .chainCall2() .chainCall3(); ซึ่งไม่ใช่สิ่งที่ฉันต้องการ ฉันต้องการให้เยื้องสายโซ่เหมือนเดิม ฉันจะแก้ไขสิ่งนี้ได้อย่างไร

2
สร้างฟังก์ชั่นออกจากต้นแบบฟังก์ชันโดยอัตโนมัติจากไฟล์ส่วนหัว
Intro เมื่อเขียนโปรแกรมใน C และ C ++ ที่คุณมักจะแยกต้นแบบการทำงานของคุณและฟังก์ชั่นที่เกิดขึ้นจริงเป็น.h/ .hppและ.c/ .cppไฟล์ น่าเสียดายที่การถ่ายโอนฟังก์ชั่นต้นแบบจากไฟล์หนึ่งไปยังอีกไฟล์หนึ่งนั้นน่าเบื่อและต้องเปิดทั้งสองไฟล์ในเวลาเดียวกัน (หรือมีหน่วยความจำที่ดี) เช่นเดียวกับการพิมพ์ที่ไม่จำเป็นจำนวนมากโดยเฉพาะเมื่อมีการเปลี่ยนแปลงอาร์กิวเมนต์หรือชื่อสมาชิก ทำ ตัวอย่าง foo.hpp: int someFunction(int someArgument); class someClass { public: someClass(); ~someClass(); int anotherFunction(int anotherArgument); }; foo.cpp: #include "foo.hpp" int someFunction(int someArgument) { // Code goes here } someClass::someClass() { // Code goes here } someClass::~someClass() { // …

3
คำศัพท์ที่เป็นเงาในความช่วยเหลือ
บางครั้งเมื่อฉันค้นหาระบบช่วยเหลือสำหรับหัวข้อเฉพาะมันจะถูกเงาโดยหัวข้ออื่น ตัวอย่างเช่นถ้าฉัน:h displayขอความช่วยเหลือสำหรับสิ่งที่เกี่ยวข้องกับ "ทรัพยากร GUI" เมื่อฉันต้องการความช่วยเหลือสำหรับการตั้งค่า "แสดง" (เหมือนในset display=lastline) ฉันจะค้นหาหัวข้อ "เงา" เหล่านี้หรือแสดงหัวข้อการจับคู่ที่เกี่ยวข้องมากที่สุดได้อย่างไร

1
บัฟเฟอร์หลายไฟล์เดียวกันการตั้งค่าที่แตกต่างกัน
เป็นไปได้หรือไม่ที่จะแก้ไขไฟล์ภายใต้การตั้งค่าที่แตกต่างกันในเวลาเดียวกัน? แม่นยำยิ่งขึ้นฉันต้องการมีหลายบัฟเฟอร์ในอินสแตนซ์เดียวกันของ Vim ซึ่งมีเนื้อหาเหมือนกัน (การเปลี่ยนหนึ่งบัฟเฟอร์ส่งผลกระทบต่อเนื้อหาของบัฟเฟอร์อื่นทันที) แต่ตำแหน่งเคอร์เซอร์ที่แตกต่างกันเครื่องหมายแตกต่างกันการเน้นไวยากรณ์ที่แตกต่าง ฯลฯ กรณีการใช้งานทั่วไปรวมถึงการแก้ไขส่วนต่าง ๆ ของไฟล์เดียวกันอย่างอิสระ (โดยไม่ต้องเข้าสู่โหมดภาพในกรณีหนึ่งจะหยุดการเลือกโหมดภาพปัจจุบันในอีกอินสแตนซ์อื่น) และแก้ไขไฟล์รูปแบบผสม (เช่น HTML และ Javascript) โดยไม่ต้องสลับการตั้งค่า . (แนวทางสำรองสำหรับกรณีการใช้งานครั้งที่สองคือการเปลี่ยนการตั้งค่าโดยอัตโนมัติตามตำแหน่งเคอร์เซอร์ แต่ไม่มีขอบเขตสำหรับคำถามนี้) บรรณาธิการที่พูดถึงเป็นที่ยอมรับว่าอาจทำให้ตกใจเรียกสิ่งนี้ว่า "บัฟเฟอร์ทางอ้อม"
10 buffers 

2
ฉันจะเปิดแท็บใหม่เป็นค่าเริ่มต้นได้อย่างไร
เมื่อเปิดvimกับหลายไฟล์ ( vim f1 f2 ...) วิธีการที่ฉันสามารถทำให้มันเปิดในแท็บได้โดยตรงโดยไม่ต้องใช้-p? ฉันกำลังมองหาการแยกพฤติกรรมของเชลล์ออกจากพฤติกรรมที่เป็นกลุ่ม, ลบvimชื่อแทนที่ใช้ ฯลฯ นั่นคือเหตุผลที่ฉันไม่ต้องการใช้ชื่อแทน ฯลฯ (ดังนั้นไม่มี-p) ฉันค่อนข้างแน่ใจว่าสิ่งนี้ถูกถามในเว็บไซต์ SE บางแห่ง (เช่นSO ) อย่างไรก็ตามฉันไม่สามารถตัดสินได้ว่าอะไรจะเป็นวิธีที่ดีที่สุดในการทำสิ่งนี้ดังนั้นฉันจึงหวังว่าจะได้รับทราบว่าทำไมวิธีการที่แนะนำจึงดี สำหรับโพสต์ SO ที่เฉพาะเจาะจงที่เชื่อมโยง: tabpagemax=9999คำตอบที่ได้รับการยอมรับไม่ เรียกว่าอคติส่วนตัว แต่ฉันเห็นว่ามีการ จำกัด จำนวนมากและฉันคิดว่ามีบางอย่างผิดปกติ (อย่างที่ฉันรู้สึกถ้าเห็นchmod 777) :au VimEnter * set tabpagemax=9999|sil tab ball|set tabpagemax&amp;vim คำตอบอื่น ๆ นำไปสู่การเปิดแท็บที่ว่างเปล่าเป็นพิเศษในขณะที่มีความกระชับมากขึ้น :autocmd VimEnter * argdo tabedit ฉันหวังว่าจะได้คำตอบที่ไม่มีแท็บพิเศษเปิดขึ้นมาและไม่ได้กำหนดขีด จำกัด ไว้ที่ค่ามาก (หรืออธิบายว่าทำไมมันจึงไม่ใช่สิ่งเลวร้าย)

3
ฉันจะใช้ trackpad ในการเลื่อนในแนวนอนได้อย่างไร?
ฉันเพิ่งสังเกตเห็นว่าการเลื่อนแทร็คแพดของฉันทำงานใน Vim, ความเฉื่อยและทั้งหมด ฉันต้องการเปลี่ยนการทำงานในแนวนอน - ดังนั้นฉันสามารถเลื่อนขึ้นและลงเพื่อให้เคอร์เซอร์เลื่อนไปทางซ้ายและขวาแทนที่จะกดปุ่มลูกศรขวาค้างไว้เป็นเวลานาน ฉันจะแมปการเลื่อนไปทางซ้าย / ขวาของฉันได้อย่างไร
10 scrolling  mouse 

2
ฉันจะเพิ่มการเน้นไวยากรณ์ไปเป็นกลุ่มได้อย่างไรใน gedit?
เมื่อฉันเขียนสคริปต์ใน gedit คำสั่งความคิดเห็นตัวแปร ฯลฯ ... จะได้รับสีที่แตกต่าง ฉันจะตั้งค่ากลุ่มให้ทำเช่นเดียวกันได้อย่างไร

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