Vi & Vim

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

3
เคอร์เซอร์หลายตำแหน่งที่ต้องการ
ฉันใช้ปลั๊กอินvim-multiple-cursors ฉันต้องการวางเคอร์เซอร์ตรงที่ฉันต้องการ ตัวอย่างเช่น ( [x]คือตำแหน่งเคอร์เซอร์): Lorem ipsum dolor sit amet[1], consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna[2] aliqua. ในข้อความประเสริฐฉันมักจะวางเคอร์เซอร์แรกจากนั้นไปที่ตำแหน่งถัดไปด้วยปุ่มลูกศรและวางที่สอง มีอะไรที่คล้ายกันใน VIM? ด้วยปลั๊กอินนี้หรืออื่น ๆ แก้ไข การติดตามความคิดเห็นความสนใจของฉันในการทำเช่นนั้นปรากฏขึ้นเมื่อพยายามเขียน \section[My first section in this book]{My first section in this book} ใน.texไฟล์ ปฏิกิริยาแรกของฉันคือการเขียน\section[]{}แล้วใส่สองเคอร์เซอร์เพื่อที่จะเขียนในสิ่งเดียวกันภายในและ[]{} ตัวอย่างอื่น ๆ คือการเพิ่ม_someStuffหลังจากชื่อตัวแปรต่าง ๆ ตัวอย่างเช่นเปิดสิ่งนี้: variable1 …

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

1
บันทึกแมโครที่เพิ่งสร้างใน vimrc
บางครั้งฉันก็สร้างมาโคร บางครั้งฉันสร้างแมโครเดียวกันหลายครั้ง บางครั้งฉันก็เบื่อที่จะสร้างมาโครตัวเดิมซ้ำอีก ฉันสามารถเก็บมาโครได้หรือไม่ ฉันสามารถโหลดมาโครที่ตั้งไว้ล่วงหน้าได้หรือไม่ ฉันสามารถสร้างมาโครและบันทึกไว้ได้ตลอดไปหรือไม่
14 macro 

3
ไม่สามารถออกจากกลุ่มแม้จะใช้ q!
:q!ฉันไม่สามารถออกจากกลุ่มแม้เมื่อฉันพิมพ์ ฉันได้รับข้อผิดพลาด E37: No write since last change (add ! to override) E162: No write since last change for buffer... ฉันคิดว่าบัฟเฟอร์เป็น NetrwTreeListing แบบอ่านอย่างเดียว
14 netrw  quit 

2
ฉันจะสร้างไฟล์คาถาดาวน์โหลดเป็นกลุ่มได้อย่างไร
เมื่อตั้งค่าspelllangเป็นครั้งแรกฉันได้รับแจ้งให้ดาวน์โหลดไฟล์การสะกดที่เหมาะสมโดยอัตโนมัติ ยังไงก็เถอะฉันยกเลิกกระบวนการเนื่องจากคำแนะนำที่ไม่ชัดเจนเมื่อถามฉันว่าควรไปที่ไดเรคทอรีไหน ตอนนี้เมื่อฉัน:set spelllangเพิ่งพูดว่าWarning: Cannot find word list… แต่ไม่ได้เสนอให้ดาวน์โหลด ฉันจะเริ่มกระบวนการใหม่ได้อย่างไร

4
การดึงและวางขณะเพิ่มขึ้น
ฉันกำลังแก้ไขไฟล์. sql ใน Vim: INSERT INTO apps_forms (app_id, form_id) VALUES (1, 1), สิ่งที่ฉันต้องการทำคือดึง(1, 1),สายแล้ววางมัน 137 ครั้ง; อย่างไรก็ตามฉันต้องการเพิ่มจำนวนที่สองในวงเล็บทุกครั้ง ผลลัพธ์จะมีลักษณะดังนี้: INSERT INTO apps_forms (app_id, form_id) VALUES (1, 1), (1, 2), (1, 3), ... (1, 137), มีวิธีทำใน Vim หรือไม่และถ้าเป็นเช่นนั้นฉันจะใช้คำสั่งอะไร ขอบคุณ!

3
จะข้ามไปยังฟังก์ชั่นการโทรได้อย่างไร?
หลังจากสร้างไฟล์แท็กด้วยexuberant-ctagsฉันสามารถข้ามจากการเรียกใช้ฟังก์ชันไปยังการประกาศ<C-]>ซึ่งสะดวกมาก คำถามของฉันคือทำอย่างไรในทางอื่น? เมื่อเคอร์เซอร์อยู่บนคำจำกัดความของฟังก์ชันฉันจะไปยังบรรทัดที่เรียกใช้ฟังก์ชันได้อย่างไร เมื่อฉันดูไฟล์ที่สร้างโดย ctags ฉันเห็นเฉพาะข้อมูลที่เกี่ยวข้องกับตำแหน่งของคำจำกัดความและไม่ใช่การโทรหมายความว่าฉันไม่สามารถทำได้ Vim นั้นเป็นวิธีแก้ปัญหาที่ชาญฉลาดหรือฉันต้องใช้บางสิ่งบางอย่าง นอกเหนือจากนี้exuberant-ctags?
14 ctags 

2
แสดงแถบรายการ listchars เป็นช่องว่าง
ฉันใช้listและlistcharsเพื่อแสดงช่องว่างของฉัน แต่สไตล์ของโค้ดที่ฉันใช้ติดแท็บ การดู>หรือ^Iแท็บทั้งหมดของฉันกำลังดูน่ารำคาญ ฉันจะเก็บอักขระรายการที่มีอยู่ทั้งหมดของฉันได้อย่างไร แต่ใช้อักขระแท็บว่างเปล่า

2
ฉันจะสร้างเอกสาร Vim ได้จาก Markdown notes หรือความคิดเห็นแบบอินไลน์หรือมีวิธีที่ดีกว่าในการเพิ่มเอกสาร?
นี้เป็นชนิดของคำถามที่สองในหนึ่ง เมื่อเร็ว ๆ นี้ฉันใช้เวลาเรียนรู้ vimscript ในเชิงลึกเรียนรู้การทำงานภายในของ vim และทำตามขั้นตอนแรกของฉันในการเขียนปลั๊กอิน vim ในระหว่างกระบวนการนี้ฉันได้เก็บบันทึกย่อไว้ในไฟล์มาร์กอัปแต่ละไฟล์และเพิ่มความคิดเห็น 'เอกสารประกอบ' แบบอินไลน์ลงในไฟล์ vimscript ในที่สุดฉันรู้สึกว่าฉันได้รับรหัสที่คุ้มค่าในการแบ่งปันและต้องการเริ่มเพิ่มเอกสารจริง ฉันยังไม่ได้เขียนไฟล์ helpdoc ของฉันเองดังนั้นฉันยังคงหาวิธีการนั้น ไม่มีประสบการณ์หรือความเข้าใจที่ดีเกี่ยวกับเวิร์กโฟลว์นี้มีสองงานที่ฉันพยายามคิดออก: การสร้างไฟล์ helpdoc จากไฟล์ 'notes' ของ markdown ของฉันบน vim / vimscript ดังนั้นฉันสามารถอ่าน / อ้างอิงได้อย่างรวดเร็วและง่ายดายจาก vim เมื่อใดก็ได้ การแยกเอกสารอินไลน์จากไฟล์ vimscript ของฉัน (คล้ายกับวิธีshoccoทำงานสำหรับเชลล์สคริปต์) เพื่อสร้าง helpdoc ที่เกี่ยวข้องสำหรับ vimscripts ข้อเสนอแนะหรือคำแนะนำใด ๆ เกี่ยวกับความคิด ( นี่เป็นความคิดที่ไม่ดีเพราะ ... ความคิดที่ดีกว่าคือ ... ) …

4
ย้ายหน้าต่างที่มีอยู่ไปยังแท็บที่มีอยู่
บางครั้งฉันต้องการย้ายหน้าต่างไปยังแท็บที่มีอยู่แล้วและฉันสงสัยว่ามีคำสั่ง / แป้นพิมพ์ลัดที่สามารถทำได้ ฉันรู้ว่าฉันสามารถปิดหน้าต่างสลับไปที่แท็บแล้วเปิดในการแยกใหม่ แต่ฉันสงสัยว่ามีวิธีที่สั้นกว่าในการบรรลุเป้าหมายนี้ โปรดทราบว่าฉันต้องการย้ายไปยังแท็บที่มีอยู่ไม่ใช่แท็บใหม่อย่างที่เป็น<C-w>Tอยู่

2
cpo & vim เป็นไวยากรณ์พิเศษหรือไม่
ในสคริปต์มันเป็นประเพณีที่จะทำสิ่งที่ชอบ: let s:save_cpo = &cpo set cpo&vim ... script ... let &cpo = s:save_cpo เพื่อให้แน่ใจว่าโหมดที่เข้ากันไม่ได้สำหรับสคริปต์ คือ: set cpo&vim การจัดเรียงบางส่วนของไวยากรณ์พิเศษในขณะที่foo & bar? หรือว่ามันเป็นเหมือนคำสั่งทริกเกอร์ไลน์หรืออย่างอื่นมากกว่านี้?
14 vimscript 

2
เมื่อใดที่จะใช้ไดเร็กทอรี after /
ฉันเข้าใจว่าเป็นสถานที่ที่จะนำสิ่งต่าง ๆ ที่ควรจะมีคำพูดสุดท้ายและไม่ถูกแทนที่โดยแหล่งข้อมูลอื่น แต่ฉันไม่ชัดเจนเกี่ยวกับวิธีการตัดสินใจว่าจะใส่อะไรลงไป~/.vim/after/ftplugin/แทนที่จะ~/.vim/ftplugin/พูด โดยทั่วไปแล้วผู้คนใช้~/.vim/ftplugin/และย้ายสิ่งต่างๆเข้ามา~/.vim/after/ftplugin/หากพวกเขาสังเกตเห็นพฤติกรรมที่ไม่พึงประสงค์หรือพวกเขาวางมันลงในไดเร็กตอรี่ทันที
14 options 

4
จะแทนที่แต่ละนัดด้วยตัวนับที่เพิ่มขึ้นได้อย่างไร
ฉันต้องการค้นหาและแทนที่แต่ละรูปแบบที่แน่นอนด้วยตัวเลขทศนิยมซึ่งเริ่มต้นที่1และเพิ่มขึ้นทีละหนึ่งสำหรับแต่ละการแข่งขัน ฉันสามารถค้นหาคำถามที่มีคำพูดในทำนองเดียวกันที่กลายเป็นว่าไม่เกี่ยวกับการเพิ่มจำนวนตัวนับ แต่แก้ไขการจับคู่แต่ละครั้งด้วยจำนวนเงินที่แน่นอน คำถามที่คล้ายกันอื่น ๆ เกี่ยวกับการแทรกหมายเลขบรรทัดมากกว่าตัวนับที่เพิ่มขึ้น ตัวอย่างก่อน: #1 #1.25 #1.5 #2 หลังจาก: #1 #2 #3 #4 ข้อมูลจริงของฉันมีข้อความมากขึ้นทุกสิ่งที่ฉันต้องการหมายเลขใหม่
14 substitute 

1
ปลั๊กอินเสียงเรียกเข้าคืออะไร?
ฉันเข้าใจว่าเราสามารถขยายพลังของ Vim เพื่อเพิ่มคุณสมบัติใหม่หรือปรับเปลี่ยนคุณสมบัติที่มีอยู่และเพิ่มประสบการณ์การแก้ไขของเรา แม้ว่าฉันจะเป็นผู้ใช้ Vim อยู่นาน แต่ตอนนี้ฉันอยู่ในอาณาเขตที่ไม่ได้จดอะไร: อะไรคือปลั๊กอิน Vim ข้อกำหนดเบื้องต้นสำหรับการเขียนปลั๊กอินคืออะไรดังนั้นฉันสามารถเขียนปลั๊กอินของตัวเองได้ในอนาคตอันใกล้

2
คำสั่ง“ set” มีผลกับบัฟเฟอร์ที่ใช้งานหรือไม่?
ฉันมีสองบัฟเฟอร์ในกลุ่ม: :ls 1 %a ".vimrc" line 1 2 #h "script.sh" line 1 Press ENTER or type command to continue เท่าที่เห็นข้างต้นฉันอยู่ในบัฟเฟอร์แรก ตอนนี้ถ้าฉันรัน:set softtabstop=16คำสั่งแล้วฉันคาดว่ามันจะส่งผลกระทบต่อบัฟเฟอร์ทั้งสอง อย่างไรก็ตามนี่ไม่ใช่ตัวอักษร - ในขณะที่stsค่าสำหรับบัฟเฟอร์แรกถูกเปลี่ยนแน่นอนและTabคีย์จะแทรกอักขระแท็บสี่ตัว ( ts=4) จากนั้นสำหรับบัฟเฟอร์ที่สองstsค่ายังคงอยู่4: :ls 1 #h + ".vimrc" line 1 2 %a + "script.sh" line 1 softtabstop=4 Press ENTER or type command to continue เหตุผลที่เป็นเช่นนั้น? …
14 set  setlocal 

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