Vi & Vim

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

2
ฉันจะเปิดไฟล์จากสาขา git อื่นได้อย่างไร
ฉันต้องการเปิดไฟล์จากสาขาอื่นในที่เก็บ git ปัจจุบัน ฉันได้เห็นคำถาม SO นี้แต่คำแนะนำสำหรับการรวมกับ Vim นั้นยุ่งยาก (ไปป์ Vim, เปิด stdin, ตั้งค่า filetype และอื่น ๆ ด้วยตนเอง) มีวิธีที่ง่ายกว่าที่จะเก็บการเน้นไวยากรณ์การตั้งค่าประเภทไฟล์ ฯลฯ หรือไม่? ถ้ามันช่วย: ฉันติดตั้งปลั๊กอินผู้ลี้ภัย (แม้ว่าไม่ค่อยได้ใช้) ฉันไม่จำเป็นต้องแก้ไข ไฟล์สามารถเป็นไฟล์สำหรับบัฟเฟอร์ที่เปิดอยู่ในปัจจุบันหรือไฟล์อื่น
35 git 

5
ฉันจะบันทึกไฟล์ในไดเรกทอรีที่ยังไม่มีอยู่ได้อย่างไร?
สมมติว่าฉันเริ่มเป็นกลุ่มเพื่อแก้ไขไฟล์ใหม่ในไดเรกทอรีที่ยังไม่ได้สร้าง: vim nonExisitingDirectory/newFile.txt Vim จะแสดงบัฟเฟอร์ว่างให้ฉันอย่างมีความสุขและฉันสามารถเริ่มเขียนไฟล์ใหม่ของฉันได้ แต่เมื่อฉันต้องการเขียนไฟล์ลงดิสก์ฉันได้รับข้อผิดพลาดนี้: E212: Can't Open file for writing. ฉันคิดว่านี่เป็นเพราะไดเรกทอรียังไม่มีอยู่ มีวิธีบังคับให้ Vim สร้างไดเรกทอรีให้ฉันหรือไม่?
35 save  autocmd 

10
จะใส่เครื่องหมายชุดของเส้นที่เลือกในโหมดภาพได้อย่างไร?
ฉันจะแสดงความคิดเห็นออกหลายบรรทัดในโหมดภาพที่เลือกได้อย่างไร ฉันจะทำให้เป็นภาษาเฉพาะได้อย่างไร ตัวอย่างเช่นหากเลือก 4 บรรทัดแรก: def foo(a,b): for each in (a,b): print each return a+b print "2" การดำเนินการของคำสั่ง / แมโครควรส่งผลให้สิ่งนี้ (ในหลาม): #def foo(a,b): # for each in (a,b): # print each # return a+b print "2"

2
อะไร: set background = dark ทำอะไร
ฉันไม่ได้ใส่ในของฉันcolor xxx ดังนั้นผมจึงเห็นนี้เมื่อครั้งแรกที่ผมเปิดของฉัน.vimrc.vimrc :colorให้ฉันdefaultที่นี่ :color darculaแล้วฉันพิมพ์ และมันเปลี่ยนไปเป็นแบบนี้ :colorให้ฉันdarculaที่นี่ (โดยธรรมชาติ) :set background=darkแล้วฉันพิมพ์ และมันเปลี่ยนไปเป็นแบบนี้ :colorให้ฉันdefaultที่นี่ (น่าอัศจรรย์) ดังนั้นคำถามของฉันคือ:set background=darkทำอะไรกันแน่ ฉันพยายาม:h backgroundและไม่พบสิ่งใดที่เป็นประโยชน์ ฉันเข้าใจว่าคำสั่งนี้ไม่ได้เปลี่ยนพื้นหลังจริงเพียงกลุ่มจะเปลี่ยนสีตาม แต่ฉันยังต้องการถามคำถามนี้ เพราะฉันมีความสุขจริงๆที่มีสีหลัง:color darculaและ:set background=darkดังนั้นผมจึงสงสัยว่าจะเขียนโทนสีของตัวเองโดยไม่ต้องใส่ในของฉันset background=dark.vimrc ผมเอาคำแนะนำจาก @statox และใส่ที่บรรทัดสุดท้ายของฉันset background=dark darcula.vimจากนั้นcolor darculaให้ภาพหน้าจอที่สามให้ฉัน อย่างไรก็ตามเมื่อฉันวางไว้ที่บรรทัดแรกcolor darculaให้ภาพหน้าจอที่สองให้ฉัน นอกจากนี้ยังset bg=darkมีการเปลี่ยนแปลงไปยังหน้าจอที่สาม ฉันสันนิษฐานโดยวางไว้ที่บรรทัดแรกฉันบอกเป็นกลุ่มว่า colorcheme นี้ถูกออกแบบมาสำหรับพื้นหลังสีเข้ม โดยการวางไว้ที่บรรทัดสุดท้ายในทางตรงกันข้ามฉันปล่อยให้สันนิษฐานว่า colorcheme นี้ถูกออกแบบมาสำหรับพื้นหลังแสงแล้วทำให้เป็นกลุ่มเปลี่ยนแปลงบางส่วนด้วยตัวเอง (เมื่อมันประมวลผลบรรทัดสุดท้าย) หากสิ่งที่ฉันคิดว่าเกิดขึ้นจริงคำถามของฉันยังไม่ได้ตอบ เสียงเรียกร้องอะไรที่เปลี่ยนแปลงไปอย่างแน่นอนเมื่อฉันใช้set bg=darkAFTER มันได้โหลด colorcheme แสงหรือไม่ การกำหนดค่า vim ทั้งหมดของฉันมีอยู่ที่https://github.com/MichaelMa2014/.vim

3
ฉันจะรับ Vim เวอร์ชันใหม่บน Ubuntu ได้อย่างไร
แพ็คเกจของ Ubuntu นั้นค่อนข้างเก่า แต่สำหรับบางโปรแกรมบนเดสก์ท็อป (เช่น Vim) ฉันค่อนข้างจะมีเวอร์ชั่นล่าสุดเนื่องจากเวอร์ชั่นใหม่กว่านั้นมักจะแก้ไขข้อบกพร่องต่าง ๆ ฉันจะรับ Vim เวอร์ชั่นล่าสุดที่สมเหตุสมผลบน Ubuntu ได้อย่างไร?

4
ฉันจะเปลี่ยนการเยื้องเริ่มต้นตามประเภทไฟล์ได้อย่างไร
ฉันต้องการมีการเยื้องที่แตกต่างกันตามประเภทของไฟล์ที่ฉันกำลังทำงาน ตัวอย่างเช่นทำงานกับ.cไฟล์ที่ฉันต้องการเยื้องของฉันเป็น 4 ช่องว่าง ใน.htmlไฟล์ที่ฉันต้องการ (ต้อง) ทำงานกับแท็บ ฉันจะบรรลุสิ่งนั้นได้อย่างไร

2
ปิดไฟล์แยกทั้งหมดยกเว้นไฟล์ที่โฟกัสอยู่หรือไม่
บางครั้งเมื่อฉันทำงานกับไฟล์ฉันจะเปิดไฟล์หลาย ๆ ไฟล์เพื่อให้เข้าใจถึงการไหลของรหัสปัจจุบันจนถึงจุดหนึ่ง อย่างไรก็ตามบางครั้งสิ่งนี้นำไปสู่การเปิดหลายไฟล์พร้อมกันโดยแยก มีคำสั่งให้ออกทั้งหมดยกเว้นหน้าต่างที่เลือกหรือไม่

4
วิธีการสร้างฟังก์ชั่น vimscript ด้วยอาร์กิวเมนต์ที่เป็นตัวเลือก?
ฉันต้องการสร้างฟังก์ชันที่มีอาร์กิวเมนต์เป็นตัวเลือก ในหลามฉันจะทำสิ่งนี้: def functionName(arg1,arg2=false,arg3=false): if arg2: #Do stuff with arguments else: #Do stuff without arguments ฉันได้ลองทำfunction FunctionName(arg1,arg2=false,arg3=false)แล้ว แต่มันก็ทำให้ฉันมีข้อผิดพลาดในการบอกว่าอาร์กิวเมนต์ไม่ถูกต้อง ฉันจะทำสิ่งนี้ใน vimscript ได้อย่างไร
33 vimscript 

6
ฉันสามารถลบทั้งบรรทัดยกเว้นตัวแบ่งบรรทัดได้หรือไม่
การดำเนินการที่ค่อนข้างธรรมดาสำหรับฉันในกลุ่มเนื่องจากฉันบังคับและครอบงำและชอบที่จะทำให้ไฟล์ของฉันปลอดจากช่องว่างคือการลบเนื้อหาของทั้งบรรทัด แต่ไม่ใช่ตัวบรรทัดเอง (เช่นไม่ใช่ตัวแบ่งบรรทัด) มีวิธีที่เป็นกลุ่มในการทำเช่นนี้? บางทีการd<movement command>ดำเนินการ? เพื่อให้ห่างไกลที่ดีที่สุดที่ฉันได้เป็น 0d$(ในบรรทัดในคำถาม) มีวิธีที่เร็วกว่านี้ไหม


6
การนำการตั้งค่าไปใช้กับแผนผังไดเรกทอรีเท่านั้น
ที่ทำงานของฉันเราใช้มาตรฐานts2; ความชอบส่วนบุคคลของฉันคือ 4 ซึ่งเป็นสิ่งที่ผมใช้สำหรับโครงการงานอดิเรกของฉันและโครงการอื่น ๆ ts=8ที่เราได้รับมรดกมีการประชุมของ นอกจากนี้ยังมีการตั้งค่าอื่น ๆ ที่ฉันต้องการตั้งเป็นพื้นฐานของโครงการ (เช่นการพับ) อ้างอิงการตั้งค่าเหล่านี้ในประเภทไฟล์หรือการตรวจจับโดยอัตโนมัติตามสิ่งที่ไฟล์ใช้ไม่ใช่ตัวเลือกที่ดีเนื่องจากฉันต้องการเคารพข้อตกลงของแต่ละโครงการ ฉันสามารถทำให้ Vim ใช้ไฟล์การตั้งค่าที่ใช้กับโครงการ (ทุกอย่างในแผนผังไดเรกทอรี) โดยไม่ต้องเพิ่ม modeline ให้กับไฟล์ทั้งหมดได้หรือไม่?
33 vimrc  filesystem 

2
ฉันสามารถดูประวัติการกดปุ่มในโหมดปกติได้หรือไม่?
ฉันรู้ว่า Vim เก็บประวัติคำสั่ง ex การค้นหาการข้ามตำแหน่งการเปลี่ยนแปลงและอื่น ๆ ด้วยshowcmdset, Vim จะแสดงให้คุณเห็นว่าคุณใช้คีย์ใดบ้างสำหรับคำสั่งโหมดปกติจนกระทั่งคำสั่งนั้นทำงาน บางครั้งเมื่ออยู่ในโหมดปกติฉันพิมพ์ผิดและการกระทำเกิดขึ้น ฉันสามารถยกเลิกการกระทำเหล่านี้ได้ แต่บางครั้งฉันอยากรู้ว่าการแก้ไขในช่วงที่เกิดความผิดพลาดเกิดขึ้นได้อย่างไร บางครั้งการแก้ไขดูเท่และฉันต้องการทราบวิธีการทำซ้ำในอนาคต ดังนั้นมีวิธีการดูประวัติของการกดปุ่มในโหมดปกติใด ๆ คั่นอย่างยิ่งเมื่อเกิดการแก้ไขหรือการกระทำที่เกิดขึ้นจริง (เช่นการเคลื่อนไหวหรือการเปลี่ยนแปลงโหมด)?

3
วิธีรับ C + + กรอกอัตโนมัติอัจฉริยะ
บรรณาธิการบางคน (เช่น visual studio บน windows) ทำการเติมข้อความอัตโนมัติ C ++ ซึ่งเข้าใจ C ++ ตัวอย่างเช่นกำหนด: #include <vector> int main(void) { std::vector<int> v; v.i ในสตูดิโอภาพอัตโนมัติเสร็จรู้วิธีการเดียวในการเริ่มต้นที่ที่มีฉันเป็นstd::vector<int>insert เป็นไปได้ที่จะได้รับการเติมข้อความอัตโนมัติประเภทนี้เป็นกลุ่มหรือไม่?

3
ฉันสามารถใช้แบบอักษรที่ไม่ใช่แบบโมโนสเปซใน Vim หรือ gVim ได้หรือไม่?
มีวิธีใดที่จะใช้แบบอักษรที่ไม่ใช่แบบ monospace อย่างใดอย่างหนึ่งvimหรือgvimไม่? ฉันพยายามเปลี่ยนแบบอักษรสำหรับ gVim ด้วย: :set guifont=Dejavu\ Serif\ 12 แต่นี่ทำให้ฉันได้ผลลัพธ์ที่น่าเกลียดบ้าง: ฉันได้รับผลลัพธ์เดียวกันถ้าฉันใช้เมนู (แก้ไข -> เลือกแบบอักษร) :help guifont พูดว่า: Note that the fonts must be mono-spaced (all characters have the same width). An exception is GTK 2: all fonts are accepted, but mono-spaced fonts look best. ดังนั้นฉันคิดว่าผลลัพธ์ข้างต้นถือเป็น "ไม่ได้ดูดีที่สุด"? สามารถปรับปรุงให้ดีขึ้นได้ไหม? ฉันยังลองตั้งค่าฟอนต์ที่ไม่ใช่แบบ monospace …
32 terminal  gvim  font 

3
คุณ“ chomp” สตริงใน Vim ได้อย่างไร?
สมมติว่าคุณใช้ vimscript ในส่วนต่อไปนี้: let @z = system("date") สิ่งนี้จะใส่สตริงของวันที่ปัจจุบันลงใน z register แต่สตริงจะลงท้ายด้วยการขึ้นบรรทัดใหม่ที่ฉันไม่ต้องการ มีวิธีการในตัว (คล้ายกับ Perl ของchomp) เพื่อกำจัดบรรทัดใหม่ต่อท้ายของสตริง?
32 vimscript 

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