Vi & Vim

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

2
จะเยื้องเป็นช่องว่างแทนแท็บได้อย่างไร
ฉันกำลังเขียนเทมเพลต html บางไฟล์ในไฟล์ JADE ฉันต้องการโค้ดเยื้องอัตโนมัติพร้อมช่องว่างแทนแท็บ ฉันพยายามshiftwidth=2, tabstop=2แต่ไม่ว่าสิ่งที่ก็ยังคงเยื้องโดยใช้แท็บแทนสเปซบาร์ซึ่งเป็นสาเหตุรวบรวมหยกที่จะโยนความผิดพลาด ฉันจะเยื้องส่วนใหญ่ของรหัสโดยอัตโนมัติโดยใช้ช่องว่างแทนแท็บได้อย่างไร

2
หนึ่งจะผนวกเข้ากับคลิปบอร์ดลงทะเบียนเป็นกลุ่มได้อย่างไร?
ฉันรู้แล้วว่าคุณสามารถคัดลอกบางสิ่งไปยังการลงทะเบียนโดยใช้: (รวมทั้งคำสั่งดึง, ลบ, ฯลฯ ) "a ฉันยังเข้าใจว่าคุณสามารถต่อท้ายการลงทะเบียนโดยใช้: "A นอกจากนี้ฉันเข้าใจวิธีการคัดลอกบางสิ่งไปยังการลงทะเบียนคลิปบอร์ดโดยใช้: "+ ฉันจะพิมพ์อะไรต่อท้ายทะเบียนคลิปบอร์ด รุ่นที่เป็นกลุ่มของฉัน: VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jan 2 2014 19:39:59) Huge version with GTK2 GUI.

4
เลิกทำ <CR> ในโหมดแทรก
บางครั้งในโหมดแทรกฉันโดน&lt;CR&gt;ผิดพลาดและฉันต้องกดแบ็คสเปซหลายครั้ง (ขึ้นอยู่กับการเยื้อง) เพื่อกลับไปยังตำแหน่งที่ฉันอยู่ เช่น &lt;div&gt; &lt;p&gt; This is some text []&lt;/p&gt; &lt;/div&gt; เคอร์เซอร์อยู่[]และฉันก็โดน&lt;CR&gt;: &lt;div&gt; &lt;p&gt; This is some text []&lt;/p&gt; &lt;/div&gt; ตอนนี้ฉันต้องกดแบ็คสเปซสองครั้งเพื่อกลับไปที่บรรทัดก่อนหน้า (กรณีนี้ไม่เลวเลย แต่ไม่มีการเยื้องมากนัก) คุณรู้วิธีที่ดีกว่าที่จะทำ?

5
วิธีที่ง่ายที่สุดในการสลับกิ่งก้านสาขา
ตอนนี้ฉันใช้ fugitive เพื่อจัดการ git เกือบทุกอย่างที่เกี่ยวข้อง แต่ฉันไม่สามารถหาเวิร์กโฟลว์ที่ดีในการมองเห็นและสลับระหว่างสาขาที่มีอยู่ได้อย่างรวดเร็ว ฉันสามารถทำได้:Git checkout &lt;branch-name&gt;ปัญหาคือการเติมข้อความอัตโนมัติทั้งชื่อไฟล์และสาขาและฉันต้องการรายการสาขา

2
มีวิธีการและเหตุการณ์ใน autocmd หรือไม่
ผมอยากจะเรียกautocmd ทั้งสองเหตุการณ์ที่เกิดขึ้น autocmdแต่ไม่ใช่ในลักษณะที่จะทำมักจะเป็นเช่นถ้าเหตุการณ์ใดเหตุการณ์หนึ่งที่เกิดขึ้นแล้วเรียก ฉันต้องการที่จะเรียกมันถ้าเหตุการณ์ทั้งสองเกิดขึ้น ตัวอย่างเช่น: วิธีปกติในการทำ autocmd BufWrite,BufRead *.c *.py *.h :call StripTrailingWhitespaces() รหัสนี้จะเรียก StripTrailingWhiteSpaces () บน BufWrite หรือ BufRead ฉันต้องการทำสิ่งที่ชอบ: autocmd Filetype c,cpp,python AND BufWrite :call StripTrailingWhiteSpaces() ในคำอื่น ๆ เรียกautcmdเมื่อชนิดของไฟล์เป็นหนึ่งใน c, cpp, python และการเขียนในบัฟเฟอร์นี้เกิดขึ้น ความช่วยเหลือใด ๆ ที่ชื่นชม
21 autocmd 

5
ลบจนกว่าจะสิ้นสุดด้านขวาของบล็อกด้านในปัจจุบัน
สมมติว่าฉันมีรหัสเช่นนี้ ( |แสดงถึงตำแหน่งเคอร์เซอร์ ): func1(x|, func2(), y); ฉันต้องการที่จะได้รับ: func1(x|); มีวิธีลบรหัสจากตำแหน่งของเคอร์เซอร์ไปยังตำแหน่งที่อยู่ก่อนส่วนท้ายขวาของบล็อกด้านในปัจจุบันหรือไม่ ฉันรู้ว่าฉันสามารถไปด้วยdt).แต่ฉันสงสัยว่ามีวิธีผสมกับสิ่งที่di)ไม่

1
อย่างไร: g /^$/,/./- j (ลดบรรทัดว่างหลาย ๆ บรรทัดเป็นหนึ่งช่องว่าง) ทำงานเป็นกลุ่ม?
ในบทความVim Regular Expressions , Oleg Raisky ให้คำสั่งต่อไปนี้เพื่อลดบรรทัดว่างหลายบรรทัดให้เป็นหนึ่งช่องว่าง: :g/^$/,/./-j มีคนช่วยอธิบายวิธีการทำงานนี้ได้ไหม ฉันรู้ว่า:gคำสั่งและการแสดงออกปกติ แต่ฉันไม่เข้าใจว่าส่วน/,/./-jนั้นทำอะไร

2
ฉันจะกำหนดการเชื่อมโยงคีย์ปลั๊กอินใหม่ได้อย่างไร
ฉันติดตั้งปลั๊กอินที่ไม่มีกลไกในการปิดใช้งานการแมปคีย์ที่กำหนดไว้ ฉันต้องการกำหนดหนึ่งในการแมปใหม่ ( &lt;leader&gt;cc) ที่กำหนดโดยปลั๊กอินสำหรับ pursope ของฉันฉันพยายามใส่บรรทัดต่อไปนี้ในของฉัน.vimrc: noremap &lt;leader&gt;cc echo "my purpose" แต่สิ่งนี้ใช้งานไม่ได้&lt;leader&gt;ccยังคงดำเนินการคำสั่งปลั๊กอิน ฉันจะกำหนดการแมปของฉันอย่างไรเพื่อแทนที่ทับการกำหนดโดยปลั๊กอิน?

8
มีวิธีปฏิบัติที่ดีที่สุดในการพับไฟล์ vimrc หรือไม่
ฉันเพิ่งรู้ว่าvimrcตอนนี้ฉันมีความยาวมากกว่า 400 บรรทัด (ซึ่ง IMO มากเกินไปฉันจะพยายามลดขนาดนั้น) และเพื่อให้ง่ายต่อการนำทางอ่านและแก้ไขฉันตัดสินใจที่จะตรวจสอบแนวคิดของการพับเป็นกลุ่ม(ซึ่ง ผมไม่คุ้นเคยกับ) ฉันพยายามตั้งค่าวิธีการพับเป็นindentแต่ฉันไม่ชอบผลลัพธ์ (มันยุ่งเกินไปเป็นส่วนใหญ่เพราะส่วนใหญ่ของฉันvimrcไม่ได้เยื้องจริงๆ) ฉันยังพยายามชุดfoldmethodไปexprและsyntaxแต่ผมก็ไม่สามารถที่จะพับอะไรถูกต้อง ที่นี่ใช้diffเป็นวิธีการพับดูไม่เกี่ยวข้อง (หรือถ้าฉันไม่เข้าใจวิธีใช้) ดังนั้นสำหรับตอนนี้ฉันใช้markerวิธีที่ไม่พอใจฉันอย่างสมบูรณ์เพราะ"{{{และ"}}}เครื่องหมายซึ่งฉันพบว่า "มีเสียงดัง" ในไฟล์ ดังนั้นฉันต้องการทราบว่ามีแนวทางปฏิบัติที่ดีที่สุดหรือแนวทางทั่วไปเกี่ยวกับการพับกอย่างถูกต้องvimrcหรือไม่ หมายเหตุ 1:เราทุกคนรู้ดีว่าไม่ใช่ฟอรัมและไม่ได้รวบรวมความคิดเห็นส่วนตัวและนั่นไม่ใช่สิ่งที่ฉันกำลังมองหา: แน่นอนฉันเดาว่าบางคนมีความชอบ แต่พวกเขาต้องการทราบว่าทำไมใช้ เครื่องหมาย (ตัวอย่าง) ปรับปรุงความสามารถในการอ่านได้มากกว่าการใช้การเยื้อง หมายเหตุ 2:เป้าหมายหลักของฉันคือทำให้vimrcชัดเจนที่สุดเท่าที่จะเป็นไปได้ดังนั้นหากมีแนวทางปฏิบัติที่ดีอื่น ๆ เพื่อสร้างสิ่งที่ดีvimrcฉันก็อยากรู้ แก้ไข 1:ฉันควรจะคิดว่าฉันvimrcได้แบ่งย่อยแล้วในส่วน (และบางครั้งส่วนย่อย) เป็นคนหลัก ตัวเลือกทั่วไป ปลั๊กอิน (มีส่วนย่อยสำหรับแต่ละปลั๊กอินและการกำหนดค่า) แมป การนำทาง (ยังมีส่วนย่อย) สี ฯลฯ ... และนี่เป็นโครงสร้างที่ทำให้ฉันคิดถึงการพับ: ฉันรู้สึกว่าสามารถส่งออกเฉพาะส่วนที่ฉันสนใจในบางจุดนั้นเป็นสิ่งที่สะดวกมาก แก้ไข 2:คำตอบที่กล่าวถึงการแบ่งย่อยของvimrcในหลาย ๆ ไฟล์นั้นถูกต้อง แต่ตามความชอบส่วนตัวฉันควรใช้การพับเนื่องจากฉันคิดว่ามันง่ายกว่าที่จะรักษาเพียงหนึ่งไฟล์ใน git repo …
21 vimrc  folding 


8
วิธีการ "เต็มหน้าจอ" เรียกดูเป็นกลุ่มช่วยเหลือ?
ฉันรู้ว่าฉันสามารถเรียกดูเป็นกลุ่มด้วยความช่วยเหลือ:helpแต่นี่เป็นการเปิดทางแยก บางครั้งฉันก็ชอบศึกษาเอกสาร อ่านเอกสารในโหมด "เต็มหน้าจอ" ได้อย่างไร

5
GitHub สำหรับ. vimrc และปลั๊กอิน
ฉันรู้ว่าหลาย ๆ คนเก็บ. vimrc ของพวกเขาไว้บน GitHub เพื่อให้ง่ายต่อการได้รับสิทธิในการทำงานกับเครื่องจักรใหม่และนั่นก็สมเหตุสมผลสำหรับฉัน อย่างไรก็ตามการรวมปลั๊กอินนั้นเป็นปัญหาเพราะปลั๊กอินที่ฉันใช้นั้นเป็นที่เก็บคอมไพล์แล้ว เราจะสร้าง repo ที่จะติดตามทั้ง. vimrc และปลั๊กอินที่อาจติดตั้งได้อย่างไร

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

4
ฉันจะให้ Vim เพิกเฉยต่อการกำหนดค่าผู้ใช้ทั้งหมดได้อย่างไรราวกับว่ามันถูกติดตั้งใหม่
เพื่อให้มั่นใจว่าพฤติกรรมไม่ได้รับผลกระทบจากการกำหนดค่าส่วนตัวของฉันฉันต้องการเริ่ม Vim ด้วยวิธีที่ละเว้นไฟล์ config ที่ผู้ใช้ติดตั้งทั้งหมดของฉันราวกับว่า Vim เพิ่งถูกติดตั้งใหม่เป็นครั้งแรกและผู้ใช้เรียกใช้ ทันที นี่คือการแก้ไขในคำถามที่พบบ่อยซึ่งแสดงให้เห็นว่าคำตอบคือการเริ่มต้นเป็นกลุ่มด้วยคำสั่งต่อไปนี้: vim -u NONE -U NONE -N -i NONE วิธีนี้ได้รับมากที่สุดแต่runtimepathตัวเลือกยังคงมี~/.vimและโดยเฉพาะอย่างยิ่ง~/.vim/after(เช่นถ้าฉันเปิดการตรวจสอบประเภทไฟล์และเปลี่ยนประเภทไฟล์รหัสใน~/.vim/after/syntax/the_relevant_filetype.vimจะถูกดำเนินการ) ฉันสามารถแก้ไขปัญหาเฉพาะนี้ได้โดยเรียกใช้คำสั่งต่อไปนี้เมื่อเริ่มต้น *: :set runtimepath-=~/.vim :set runtimepath-=~/.vim/after ... แต่ฉันไม่แน่ใจว่า: นี่เป็นโซลูชันที่มีประสิทธิภาพ: เส้นทางเหล่านี้เป็นเส้นทางเดียวที่ทำให้การกำหนดค่าผู้ใช้มีผลหรือไม่ มีอะไรอีกที่ฉันไม่ได้คิด? มีวิธีที่ดีกว่าในการบรรลุผลลัพธ์ที่ต้องการ * โดยใช้--cmdหรือ-u vimrcเชลล์อาร์กิวเมนต์หรือเพียงพิมพ์ด้วยตนเอง แก้ไข : นี่คือตัวอย่างหนึ่งของปัญหาที่ฉันกำลังพยายามแก้ไข (แม้ว่าฉันต้องการวิธีการแก้ไขปัญหาที่เป็นไปได้อื่น ๆ ที่ฉันอาจยังไม่ได้พบ): สร้างไฟล์ ~ / .vim / after / ftplugin / c.vim ที่มีเนื้อหา: …
21 startup 

3
ฉันจะบอกเป็นกลุ่มได้อย่างไรว่านามสกุลไฟล์บางส่วนมีความหมายเหมือนกัน
ฉันแก้ไขรหัส C ++ ใน.cppไฟล์ในขณะที่รหัสแม่แบบเข้าไปใน.tccไฟล์ เมื่อฉันเปิดไฟล์ดังกล่าวจะไม่มีการเน้นไวยากรณ์ ฉันลองใช้ไฟล์set syntax=cppaa แต่ไม่ได้ทำอะไรเลยในขณะที่มันใช้งานได้ มีวิธีที่จะเป็นกลุ่มปฏิบัติต่อส่วนขยายที่เฉพาะเจาะจงเหมือนกันกับคนอื่น ๆ ?tpp.vim~/.vim/ftplugin/

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