Vi & Vim

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


4
มีวิธีการที่เชื่อถือได้ย้อนกลับไปมาในประวัติไฟล์
ฉันต้องการไปยังไฟล์ที่ฉันเพิ่งแก้ไขครั้งล่าสุดและถัดไปเช่นปลั๊กอิน MRU ทำ :bnextและ:bprevบางครั้งก็ใช้งานได้ แต่ส่วนใหญ่แล้วไม่ใช่แค่ฉันจบลงในไฟล์ที่คลุมเครือบางอย่างฉันจำไม่ได้ว่าการแก้ไขและถูกบังคับให้ถอยกลับไปที่ปลั๊กอิน MRU มีวิธีแก้ไขหรือไม่ Ctrl-^สลับระหว่างสองไฟล์สุดท้าย เป็นวิธีที่ดีที่สุดในการนำทางมากขึ้น? ฉันเข้าใจว่ามันอาจเป็นเรื่องยุ่งยาก แต่ฉันเห็นด้วยกับสิ่งใดก็ตามที่สามารถปรับปรุง:bn :bpพฤติกรรมปัจจุบัน บัฟเฟอร์ที่ฉันมักจะเห็นอยู่นอกสถานที่ อาจมีปลั๊กอินที่สามารถติดตามไฟล์ล่าสุดและมี hooks เพื่อให้ฉันสามารถสร้างการแมป การตอบความคิดเห็นล้างความคิดของฉันเล็กน้อย ฉันเชื่อว่าสิ่งที่ฉันต้องการคือสามารถย้ายไฟล์ตามลำดับการบันทึกล่าสุด ด้วยวิธีนี้ถ้าฉันย้อนกลับไปในประวัติศาสตร์คำสั่งซื้อจะไม่เปลี่ยนแปลงจนกว่าฉันจะบันทึกไฟล์ซึ่งจะกลายเป็นครั้งสุดท้ายและทำหนึ่งขั้นตอน "ย้อนกลับ" ไปยังไฟล์ที่บันทึกไว้ก่อนหน้านั้นนั่นคือลำดับที่ฉันเริ่มต้น บางอย่างเช่นCtrl-O Ctrl-Iคู่ที่เปลี่ยนไฟล์ได้ทันทีโดยไม่ต้องกระโดดไปรอบ ๆ บัฟเฟอร์ปัจจุบัน เรียงลำดับของไลค์uและUใน netrw: u Change to recently-visited directory |netrw-u| U Change to subsequently-visited directory |netrw-U|
15 buffers 

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

2
วิธีใช้ Ctrl-P เพื่อค้นหาเนื้อหาไฟล์แบบโต้ตอบสำหรับไฟล์ทั้งหมดในโครงการได้อย่างไร?
ฉันพยายามวันนี้เพื่อทำการค้นหาในทุกไฟล์ของโครงการ ฉันใช้Ctrl-Pและค้นหาในบรรทัดดังนี้: แต่ผลลัพธ์ของการค้นหาจะอยู่ที่ไฟล์ที่เปิดก่อนหน้านี้เท่านั้น main.phpนี่ฉันเปิดเท่านั้น คุณรู้วิธีค้นหาไฟล์ทั้งหมดโดยไม่ต้องเปิดทีละไฟล์หรือไม่? ขอบคุณ

1
เครื่องมือตรวจสอบไวยากรณ์ภาษาอังกฤษแบบอินไลน์สำหรับ vim-latex?
ฉันกำลังมองหาตัวตรวจสอบไวยากรณ์ภาษาอังกฤษสำหรับชุด vim-latex ที่ตรวจสอบไวยากรณ์ขณะที่ฉันพิมพ์ แต่ไม่เน้นสิ่งที่อยู่ภายใน$$หรือคำสั่ง\begin{equation}& \end{equation}มีอะไรแบบนี้เหรอ? ฉันรู้ว่ามี LanguageTool แต่ดูเหมือนว่ามันจะไม่ทำงานกับ.texไฟล์

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

2
วิธีการออกเป็นกลุ่มจากโหมดแยก?
วิธีการอย่างมีประสิทธิภาพออกเป็นกลุ่มเมื่อแก้ไขไฟล์หลายไฟล์ในโหมดแยกที่หนึ่งไป? ดูเหมือนว่าเมื่อฉันมีหน้าต่างแยก 10 หน้าต่างฉันต้องทำซ้ำ:q!คำสั่ง10 ครั้งสำหรับแต่ละหน้าต่างซึ่งใช้เวลานาน มีวิธีใดที่ดีกว่าในการออกจากตัวแก้ไขหรือไม่ สำหรับวิธีแก้ปัญหาที่สกปรกก็สามารถออกได้โดยกดControl+ Zและพิมพ์kill %1เพื่อฆ่ามัน
15 split  quit 

4
วิธีแก้ไขเนื้อหาจากอินพุตมาตรฐาน
ฉันต้องการแก้ไขเนื้อหาในกลุ่มที่สร้างขึ้นแบบไดนามิกจากบรรทัดคำสั่งโดยไม่ต้องมีไฟล์ ในตัวอย่าง: $ echo This is example. | vim /dev/stdin $ cat /etc/hosts | vim /dev/stdin แต่มันล้มเหลวด้วยข้อผิดพลาด: เป็นกลุ่ม: คำเตือน: อินพุตไม่ได้มาจากเทอร์มินัล เป็นกลุ่ม: ข้อผิดพลาดในการอ่านอินพุตกำลังออก ... เป็นไปได้ไหมที่จะบรรลุเป้าหมายนั้น?

4
ฉันจะรับ gvim เพื่อเริ่มขยายใหญ่สุดใน Windows ได้อย่างไร
ฉันต้องการให้กองบรรณาธิการของฉันมอบอสังหาริมทรัพย์ให้กับหน้าจอให้ฉันมากที่สุดเท่าที่จะเป็นไปได้เพราะจะเป็นการเพิ่มความสามารถในการดูโค้ดส่วนใหญ่ในครั้งเดียว ปัญหาคือgvimดูเหมือนว่าจะให้ฉันหน้าต่าง 80x25 หรือจำขนาดไม่ขยายล่าสุดขึ้นอยู่กับวิธีที่ฉันเรียกมัน ดังนั้นฉันจะบังคับให้มันมีขนาดใหญ่ที่สุดเท่าที่จะทำได้โดยไม่คำนึงถึงสถานะใด ๆ ที่จำได้อย่างไร

2
อะไรทำให้ปลั๊กอิน Vundle เข้ากันได้และตัวจัดการปลั๊กอินอื่นสามารถใช้แทนกันได้?
เป็นเวลานานแล้วที่ฉันใช้Vundleเพื่อจัดการปลั๊กอินของฉัน ที่ดีที่สุดฉันสามารถทำสิ่งนี้โดยทั่วไปเพียงแค่จัดระเบียบปลั๊กอินในโครงสร้างไดเรกทอรีแยกและติดตามการอัปเดตกับ URL ต้นทางโดยปกติปลั๊กอินจะจัดเรียงแบบเคียงข้างกันในไดเรกทอรีปลั๊กอิน ฉันพบการอ้างอิงหลายอย่างเพื่อใช้ปลั๊กอินเดียวกันภายใต้ตัวจัดการปลั๊กอินหลายตัว เช่นNeoBundleดูเหมือนว่าจะใช้ปลั๊กอินเดียวกัน อย่างไรก็ตามดูเหมือนจะมีตัวจัดการปลั๊กอินอื่น ๆ อยู่จำนวนมาก สิ่งเหล่านี้เข้ากันได้กับความรู้สึกที่ว่าพวกเขาทั้งหมดใช้ไฟล์ต้นฉบับเดียวกันหรือไม่ต้องเตรียมปลั๊กอินเป็นพิเศษเพื่อให้เข้ากันได้กับผู้จัดการแต่ละคนหรือไม่? ถามอีกวิธีหนึ่งตัวจัดการปลั๊กอินตัวอื่นที่ใช้แทนกันได้มากพอที่จะจัดการกับปลั๊กอิน Vundle ปัจจุบันของฉันและ / หรือรูปแบบปลั๊กอินใดที่ฉันสามารถสันนิษฐานได้ว่า Vundle สามารถจัดการได้แม้ว่าพวกเขาจะโฆษณาภายใต้ตัวจัดการอื่น

3
ฉันจะเยื้องบรรทัดใหม่โดยอัตโนมัติได้อย่างไร
ฉันทำงานในโครงการที่มีระดับการเยื้องต่างกัน ในหลายโครงการเหล่านี้เนื่องจากวิธีการจัดโครงสร้างไฟล์โดยทั่วไปบรรทัดส่วนใหญ่จะถูกเยื้องอย่างน้อยสองระดับ (เช่นวิธีการในไฟล์ Java) นี่หมายความว่าการสร้างบรรทัดใหม่เมื่ออยู่บนบรรทัด public void something () { จะนำเคอร์เซอร์ของฉันไปที่บรรทัดถัดไปเยื้องโดยอัตโนมัติเช่น public void something () { [cursor] ในขณะที่ฉันสามารถกดปุ่มแท็บสองสามครั้งในบรรทัดใหม่เพื่อให้เข้าแถวได้มีวิธีที่ดีกว่าในการทำสิ่งนี้ (เป็นไปได้โดยอัตโนมัติ) หรือไม่
15 indentation  ide 

2
Tmux กำลังเปลี่ยนส่วนของพื้นหลังเป็นกลุ่ม
ดูเหมือนว่าจะเกิดขึ้นเฉพาะเมื่อใช้เป็นกลุ่มภายใน tmux ฉันใช้ iTerm 2 ด้วย ถ้าฉันสร้างบานหน้าต่าง tmux ใหม่หรือปรับขนาดบานหน้าต่าง tmux มันจะมีลักษณะดังนี้: จากนั้นวิธีเดียวที่จะแก้ไขมันคือเลื่อนไปเป็นกลุ่มและกลับไปที่: สิ่งที่อาจทำให้เกิดสิ่งนี้
15 terminal  tmux 

4
ฉันจะค้นหาสตริงระหว่างหมายเลขบรรทัดที่แน่นอนได้อย่างไร
นี่เป็นปัญหาที่ฉันเพิ่งพบเมื่อไม่นานมานี้ ฉันมีไฟล์ที่มีข้อความหลายร้อยบรรทัด ฉันจะค้นหาสตริงระหว่างหมายเลขบรรทัดสองหมายเลขได้อย่างไร เช่นฉันต้องการค้นหาระหว่างหมายเลขบรรทัด 100 และ 325

2
แทนที่รูปแบบด้วยหมายเลขบรรทัดปัจจุบัน
ฉันต้องการแทนที่ 'x' ในไฟล์นี้ด้วยหมายเลขบรรทัดปัจจุบัน นั่นคือการเปลี่ยนแปลง x x x ถึง 1 2 3 สำหรับตอนนี้ฉันใช้ Perl one-liner: perl -pi -e '$x=$.; s/x/$x/' myfile.txt ฉันคิดว่า UltraEdit สามารถทำได้ด้วยการเลือกแนวตั้งและแทนที่ สิ่งนี้สามารถทำได้ในกลุ่ม? (ตัวอย่างของฉันที่นี่ถือว่า 'x' คือทั้งหมดที่มีในหนึ่งบรรทัด แต่บรรทัดในไฟล์จริงของฉันมีความซับซ้อนมากขึ้น)

3
ฉันจะใช้ --servername และ --remote ใน neovim ได้อย่างไร
ใน vim ฉันสามารถทำvim --servername fooและvim --servername foo --remote-silent bar.txtเปิดไฟล์ในอินสแตนซ์หนึ่งของ vim จากเทอร์มินัล windows หลายแห่ง (ผ่าน tmux หรืออะไรก็ตาม) สิ่งเดียวกันใน NeoVim ทำได้อย่างไร

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