Vi & Vim

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

1
บล็อกภาพแทรกบรรทัดใหม่
ฉันทำงานมากด้วยโหมดบล็อกภาพซึ่งฉันคิดว่ามีประโยชน์จริง ๆ สำหรับการเปลี่ยนแปลงอย่างรวดเร็วในหลาย ๆ บรรทัด แต่สิ่งที่ฉันพยายามทำคือการแทรกบรรทัดใหม่เช่น: สิ่งที่เลือกจะถูกบันทึกไว้เป็น[]: Some [t]ext Some [t]ext Some [t]ext Some [t]ext Some [t]ext ฉันกดIและฉันสามารถเพิ่มข้อความที่จะแทรกก่อนt: Some other text Some [t]ext Some [t]ext Some [t]ext Some [t]ext เมื่อฉันกด<Esc>ฉันจะได้รับสิ่งต่อไปนี้: Some other text Some other text Some other text Some other text Some other text แต่ตอนนี้ถ้าฉันกด<CR>แทนข้อความที่ฉันต้องการเพิ่มขึ้นบรรทัดใหม่จะถูกแทรกตามที่ต้องการ แต่ไม่ใช่สำหรับบรรทัดอื่น ผลที่ได้คือ: Some text …

1
รวมการเปลี่ยนแปลงภายนอกที่เกิดขึ้นขณะทำการแก้ไข
หากมีการเปลี่ยนแปลงภายนอกเกิดขึ้นกับไฟล์ที่กำลังแก้ไขใน Vim ฉันเข้าใจว่าฉันสามารถโหลดเนื้อหาของไฟล์:editอีกครั้งได้ แต่สมมติว่า (ภายใน) ฉันได้ทำการเปลี่ยนแปลงไฟล์ที่ฉันต้องการรักษาไว้ มีวิธีรวมการเปลี่ยนแปลงสองชุด (ภายนอกและภายใน) หรือไม่ จากสิ่งที่ฉันเข้าใจ:editเพียงแค่ทำการเปลี่ยนแปลงภายนอก
10 merge 

6
วิธีคัดลอกสี่อักขระแรกของทุกบรรทัดไปยังจุดสิ้นสุดของบรรทัดเดียวกันได้อย่างไร
รับชุดของบรรทัดที่มีลักษณะคล้ายกับนี้: 2001 "Some Kind of Title," Author's Name, Publication Name, 1 Mar. 2002 "Some Kind of Title," Author's Name, Publication Name, 12 Oct. 2003 "Some Kind of Title," Author's Name, Publication Name, 8 Apr. 2004 "Some Kind of Title," Author's Name, Publication Name, 3 Jun. มีวิธีที่ฉันสามารถคว้าตัวละครสี่ตัวแรก (ปี) และคัดลอกไปที่ท้ายบรรทัดเพื่อให้เป็นดังนี้: 2001 "Some …

2
ป้อนค่าตัวเลือกอัตโนมัติใน cmdline
ฉันไม่สามารถนับจำนวนครั้งที่ฉันได้ลองทำสิ่งนี้: :set foldmethod=syn^I ดูเหมือนว่าความสำเร็จนั้นไม่สามารถใช้กับค่าตัวเลือกได้! ในบางกรณีตัวเลือกเป็นสตริงที่ซับซ้อนซึ่งการทำให้สมบูรณ์อาจไม่สมเหตุสมผล (เช่น'comments'.) แต่มีความพยายามใด ๆ ที่จะให้การเสริมความสมบูรณ์แบบสำหรับกรณีใช้งานทั่วไปหรือไม่? ถ้าไม่ฉันจะทำตัวอย่างข้างต้นได้อย่างไร (สมมติว่าฉันต้องการที่จะทำให้หนึ่งในสาย['manual', 'indent', 'expr', 'marker', 'syntax'])

3
เป็นกลุ่ม ctags และมากไป
มีวิธีที่จะทำให้กลุ่มกระโดดข้ามไปที่คำจำกัดความการจับคู่ที่ถูกต้องโดยอัตโนมัติในกรณีที่มีหลายคำจำกัดความ รหัส C ++ ของเราใช้ฟังก์ชั่นการทำงานหนักมากเกินไปและการจัดการ ctags ของ vim นั้นดูเหมือนจะไม่พร้อม ตัวอย่างเช่น, void abc(int a, int b) { } void abc(int a, int b, int c) { } น่าแปลกที่ctrl]ใน abc(1,2,3); ใช้กับนิยามที่ 1 และไม่ใช่นิยามที่ถูกต้องซึ่งก็คือ 2nd นอกจากนี้g]ขอตัวเลือก แต่นั่นไม่ใช่สิ่งที่ฉันกำลังมองหา ขอบคุณ

1
ฉันจะจัดความคิดเห็น C ++ ให้สอดคล้องกับสไตล์ของ Google ได้อย่างไร
วิธีใดที่จะให้ Vim จัดรูปแบบความคิดเห็นของฉันให้สอดคล้องกับ Google cpplint? ส่วนบนไม่เป็นไปตามข้อกำหนดการเปลี่ยนแปลง 5 ประการที่จำเป็น เก็บความคิดเห็นนี้ในระดับเดียวกัน เพิ่มช่องว่างหลังจาก // เพิ่มช่องว่างอย่างน้อยสองช่องว่างระหว่างรหัสและความคิดเห็น จัดความคิดเห็น เพิ่มช่องว่างหลัง // (หมายเหตุฉันกำลังถามคำถามนี้ที่นี่อาจเป็นไปได้ที่จะใช้ Tabular https://github.com/godlygeek/tabular/issues/44 ) แก้ไข: ตามคำแนะนำด้านล่างนี้ใช้งานได้: ปลั๊กอิน => https://github.com/rhysd/vim-clang-format .nvimrc หรือ. vimrc การกำหนดค่า: let g:clang_format#code_style='google' let g:clang_format#style_options = { \ "AccessModifierOffset" : -3, \ "Standard" : "C++03"}

2
ฉันจะพลิกตัวละครหรือคำเช่น emacs ได้อย่างไร
ใน readline ของ bash ในโหมด emacs ฉันเพิ่งค้นพบฟังก์ชั่นการแปลงสัญญาณทำให้ฉันมีโอกาสที่จะแก้ไขการพิมพ์ผิดอย่างรวดเร็วเช่น dc dir ถึง cd dir โดยกดCTRL+ Tที่cตัวละคร มีบางอย่างที่คล้ายกันใน Vi / Vim ที่ให้ฉันสลับอักขระและคำต่าง ๆ ได้ไหม?

2
ตัวเลือก 'เส้นทาง' เริ่มต้นของ Vim ซ้ำซ้อนหรือไม่
จากเอกสารช่วยเหลือของ Vim (ดู:) :help 'path': สตริง 'path' (ค่าเริ่มต้นใน Unix: " .,/usr/include,,") - หากต้องการค้นหาสัมพันธ์กับไดเรกทอรีของไฟล์ปัจจุบันให้ใช้: :set path=. หากต้องการค้นหาในไดเรกทอรีปัจจุบันให้ใช้สตริงว่างระหว่างเครื่องหมายจุลภาคสองตัว: :set path=,, ดูเหมือนว่า.และ,,ไม่มีความแตกต่างในตัวเลือก 'เส้นทาง' พวกเขาทั้งสองหมายถึงไดเรกทอรีปัจจุบัน ฉันไม่เข้าใจว่าทำไมเราต้องใส่ทั้งคู่.และ,,ตัวเลือกเส้นทาง ความแตกต่างระหว่าง:set path=.และ:set path=,,คืออะไร?
10 path 

3
ทางเลือกเพื่อหลบหลีกการทับในการค้นหาและแทนที่สตริงที่มีความยาว
มีทางเลือกอื่นใดในการค้นหาเป็นกลุ่มและแทนที่สตริง, แทนที่จะต้องหลีกหนีทุกอักขระพิเศษในสตริง ตัวอย่างเช่นหากฉันต้องการจับคู่สตริงต่อไปนี้และแทนที่ด้วยบางสิ่ง [ERROR] Login unsucessful ถ้าอย่างนั้นฉันต้องทำ :%s/\[ERROR\]\ Login\ unsucessful/something/g และมันก็น่าเกลียดและเจ็บปวดมากขึ้นสำหรับสตริงที่ซับซ้อนที่มีอักขระพิเศษจำนวนมาก ฉันต้องการทำบางสิ่งเช่น :%s/"[ERROR] Login unsucessful"/something/g ซึ่งจะหลีกเลี่ยงการหลบหนีทั้งหมด มีคุณสมบัติเช่นนี้หรือไม่?

1
ทำไม YouCompleteMe ไม่ทำงานของพารามิเตอร์ทั้งหมด?
ฉันต้องการใช้ YouCompleteMe กับ C ++ semantic semantic แต่หลังจากผ่านไปหลายชั่วโมงฉันไม่สามารถหาสาเหตุที่มันไม่ทำงานอย่างที่คาดไว้ ดูเหมือนว่าทุกอย่างจะทำงานได้ แต่ฉันไม่สามารถทำพารามิเตอร์ฟังก์ชันให้สมบูรณ์ได้ ฉันใช้ Vim บน Archlinux (Gnome Terminal บน Openbox): Linux Arch-PC 4.2.5-1-ARCH #1 SMP PREEMPT Tue Oct 27 08:13:28 CET 2015 x86_64 GNU/Linux ฉันติดตั้ง YCM ตามคำแนะนำ (ด้วยการinstall.pyสนับสนุนสคริปต์และเสียงดังกราว) ฉันยังลองกับแพ็คเกจ AUR YCM และได้รับปัญหาเดียวกัน YcmDebugInfo: Printing YouCompleteMe debug information... -- Server has Clang support …

1
วิธีการทำให้ gq พิจารณายัติภังค์ (-) คำปกติเพื่อไม่เยื้องบรรทัดต่อไปนี้ในวรรคเดียวกัน
ฉันได้ลองในไฟล์ JavaScript หลังจากปิดการใช้งานsmartindentและautoindentตัวเลือกด้วยtextwidth = 80แต่ก็ยังคงเหมือนเดิม นอกจากนี้ยังเกิดขึ้นโดยอัตโนมัติเนื่องจากtextwidthตัวเลือกเมื่อแทรกคำที่มีความยาวเกิน 80 อักขระ เกิดอะไรขึ้น: /** * - a b c d e f g h i j k l m n o p q r s t u v w x y z a b c d e f g h i j k l …

2
มีวิธีแทรกอักขระเดียวแล้วออกจากโหมดแทรกหรือไม่
เมื่อฉันอ่านข้อความและเพิ่ม backticks รอบคำหรือเครื่องหมายคำพูดหรืออะไรก็ตามมันน่ารำคาญที่ฉันต้องกด Esc หรือ Ctrl- [หลังจากแทรกแต่ละครั้ง ส่วนแทรก (และต่อท้าย) นั้นแตกต่างกันดังนั้นจึง.ไม่ช่วยอะไรมาก มีสิ่งใดที่คล้ายกับrที่กลับไปสู่โหมดปกติหลังจากใช้อักขระตัวเดียว แต่ใช้โหมดแทรกแทนโหมดแทนที่หรือไม่?

1
ต้นกำเนิดของคำว่า "งัด" คืออะไร?
ฉันสนใจที่จะเรียนรู้ว่าคำว่างัดได้รับชื่ออย่างไร ฉันสนใจด้วยเช่นกันว่าทำไม Vi / Vim "ดึง" แตกต่างจาก Emacs "ดึง" ดูเพิ่มเติม: คำถามเดียวกันใน Unix & Linux ; คำถามที่สองเกี่ยวกับ Emacs

3
มีความแตกต่างระหว่าง“ sudo apt-get vim” และ“ ./configure --with-features = huge” หรือไม่?
ฉันต้องการติดตั้ง VIM ผ่าน apt-get แต่ฉันไม่แน่ใจว่าจะได้รับคุณสมบัติทั้งหมดหรือไม่ มีความแตกต่างระหว่างสิ่งนี้และรวบรวมจากแหล่งที่มา?

1
วิธีการแทนที่ในหลายบรรทัด?
ฉันต้องการแทรกคำในหลายบรรทัดมีคำสั่งใด ๆ ไหม :[2,3,5,7,11]s/^/word\ /g ซึ่งจะแทรกwordที่จุดเริ่มต้นของบรรทัด 2, 3 บรรทัด, 5 บรรทัด, 7 และ 11 ที่นี่มีหลายบรรทัดไม่ต่อเนื่องกัน

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