Vi & Vim

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

2
จะเพิ่มขนาดประวัติ cmdline ได้อย่างไร?
ฉันได้ตั้งค่าต่อไปนี้ใน.vimrcไฟล์แล้ว: set history=1000 อยู่ที่นั่นซักพักแล้วฉันทำงานเป็นกลุ่มทุกวันดังนั้นตอนนี้ก็มีคำสั่งมากมายที่สั่งการ ฉันรู้จากความช่วยเหลือเป็นกลุ่มที่ทำซ้ำและจับคู่บรรทัดคำสั่งจะไม่ถูกเก็บไว้และมันก็บอกว่า: Use the 'history' option to set the number of lines that are remembered (default: 20). ขณะนี้มีประมาณ 130 บรรทัดในประวัติศาสตร์ของฉัน ( :hisและq:แตกต่างกันเล็กน้อยบรรทัดที่สองมีประมาณ 90 รายการ) แต่ในความคิดของฉันควรมีมากกว่านั้น มีบางคำสั่งขาดหายไปเช่นการเปิดไฟล์บางไฟล์หรือคำสั่งการแทนที่ด้วย regex ที่ซับซ้อน ไม่ได้ใช้มาระยะหนึ่งแล้ว แต่ฉันมีขนาดประวัติเพิ่มขึ้นนานพอ มีข้อ จำกัด อีกข้อที่ฉันไม่รู้เกี่ยวกับอะไร หรืออาจไม่ใช่วิธีที่ถูกต้องในการเพิ่มขนาดประวัติ cmdline?

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


1
ใช้กรณีสำหรับ `gs '
ตามเอกสารสำหรับgs: เข้าสู่โหมดสลีปเป็นเวลา N วินาที (ค่าเริ่มต้น 1) ดังนั้นคุณสามารถใส่เป็นกลุ่มเพื่อการนอนหลับเป็นเวลา 10 10gsวินาทีโดยใช้ กรณีใช้งานที่ดีสำหรับคำสั่งนี้คืออะไร

3
ส่วนคนเปิด 3
ฉันใช้ Vim เพื่อพัฒนา C บน Linux เมื่อฉันกดKเพื่อเปิดหน้าคนสำหรับคำที่ขีดเส้นใต้ฉันไม่สามารถควบคุมได้ว่าจะเปิดส่วนคนใด มีวิธีการระบุว่าที่ไหน?

1
รูปแบบการค้นหาที่แตกต่างกันต่อหน้าต่าง / บัฟเฟอร์
เป็นไปได้ไหมที่จะมีรูปแบบการค้นหาที่แตกต่างกันต่อหน้าต่างหรือบัฟเฟอร์เช่น ฉันต้องการค้นหาคำศัพท์ A ในหน้าต่าง / บัฟเฟอร์ A และคำศัพท์ B ในหน้าต่าง / บัฟเฟอร์ B เพื่อให้ใช้hlsearchเน้นสิ่งต่าง ๆ ในเช่นการแยกแบบขนาน
10 search  buffers 

6
ลบ n lines ข้าม 1 สคริปต์บรรทัด
ฉันต้องการสร้างสคริปต์ Vim พื้นฐานที่เพียงแค่ลบบรรทัด n ข้าม 1 บรรทัดและทำซ้ำจนกว่าจะสิ้นสุดของเอกสาร ฉันไม่สนใจการจับคู่ที่เฉพาะเจาะจงฉันแค่ต้องการลบบรรทัด ตัวอย่างเช่น; ดังนั้นฉันต้องการทำซ้ำคำสั่ง3ddjสำหรับเอกสารทั้งหมด Text I want to keep. Text I want to delete. Text I want to delete. Text I want to delete. Text I want to keep. Text I want to delete. Text I want to delete. Text I want to delete. …

4
การรวมลำดับคำสั่งบันเดิลเข้าด้วยกันเพื่อทำซ้ำ (.)
พิจารณา: apple pear วางเคอร์เซอร์ของคุณในบรรทัดแรกและประเภทYpผลิต: apple apple pear วางเคอร์เซอร์ของคุณบนpearบรรทัดและพิมพ์.เพื่อทำซ้ำคำสั่งสุดท้าย สิ่งนี้ซ้ำเพียงp(แทนที่จะรวมกันYp) ผลิต: apple apple pear apple ฉันต้องการวิธีบอก.ให้ทำซ้ำคำสั่ง N ล่าสุด สิ่งที่ต้องการ2.รวมกันซ้ำYpเพื่อผลิต: apple apple pear pear Ofc ที่ไม่ทำงาน - มันซ้ำpสองครั้ง แต่ความคิดจะเป็น "ทำซ้ำลำดับของ 2 คำสั่งสุดท้าย" ฉันรู้ว่าฉันสามารถqบันทึกลำดับคำสั่ง -record และทำซ้ำได้@@แต่โซลูชันนี้ไม่เหมาะเพราะคุณต้องวางแผนล่วงหน้ามาตลอดในขณะที่ในทางปฏิบัติคุณมักจะไม่รู้ว่าคุณต้องทำซ้ำจนกว่าจะถึงเวลา คุณทำมันแล้ว มีวิธีใดบ้างที่จะบรรลุสิ่งที่ฉันต้องการ รางวัลชมเชย: หากเป็นไปไม่ได้มีวิธีการเล่นแมโครครั้งสุดท้ายซ้ำอีกครั้งหรือไม่? เช่นหากฉันพิมพ์@@เพื่อเล่นแมโครสุดท้ายของฉันฉันต้องการให้สิ่งต่อ.ไปนี้เทียบเท่ากับการพิมพ์@@อีกครั้งซึ่งไม่ได้ (เช่นหากผลลัพธ์@@ขึ้นอยู่กับบรรทัดที่คุณอยู่)

2
จะแสดงรายการตัวเลือกที่มีของปลั๊กอินได้อย่างไร?
ฉันเพิ่งพบว่าYouCompleteMeมี g:ycm_autoclose_preview_window_after_insertionตัวเลือกที่ซ่อนหน้าต่างแสดงตัวอย่างเอกสารโดยอัตโนมัติหลังจากออกจากโหมดแทรกและฉันเพิ่งเริ่มใช้ vim ด้วยดังนั้นนี่เป็นครั้งแรกที่ฉันตั้งค่าตัวเลือก ดังนั้นฉันจึงสงสัยว่าปลั๊กอินอื่นที่ฉันยัดเยียดในสภาพแวดล้อมที่เป็นกลุ่มของฉันมีตัวเลือกให้ใช้งานหรือไม่โดยไม่ต้องค้นหาด้วยตนเอง พวกเขาลงทะเบียนทั่วโลกเมื่อ vim เริ่มต้นเพื่อให้คำสั่งที่แสดงรายการพวกเขาพร้อมใช้งานหรือไม่สามารถทำได้?
10 options 

1
จัดเรียงคอลัมน์โดยไม่เปลี่ยนคอลัมน์อื่น
ฉันเพิ่งทราบ!เทคนิคการกรองและฉันรักมัน น่าเสียดายที่ฉันไม่สามารถใช้งานได้ในโหมดบล็อกภาพ หวังว่าผู้เชี่ยวชาญบางคนที่นี่จะช่วยฉันออก โดยทั่วไปฉันต้องการเรียงลำดับคอลัมน์เช่นที่สามด้านล่าง (เพียง MWE) และฉันไม่ต้องการรบกวนคอลัมน์อื่น ๆ เมื่อฉันจัดเรียง ฉันพยายามกรอง ( !) คอลัมน์ที่สามที่มองเห็น (บล็อกโหมด) เลือกคอลัมน์ผ่านsortยูทิลิตี้ แต่การเรียงลำดับค่อนข้างขยายเกินกว่าการเลือกนั่นคือทุกแถวจะถูกสลับสับเปลี่ยนไม่ใช่แค่ส่วนที่เลือกซึ่งเรียงลำดับเกินไปตามคอลัมน์แรก ! 1. LARGEST 40 2. SECOND-LARGEST 168 3. MID 2.8 4. MID 540 5. MID 14.84 6. MID 40 7. SECOND-LEAST 64 8. LEAST 8 ฉันเลือกคอลัมน์สุดท้ายโดยใช้ visual-block และพูดว่าอะไร!sort --reverseจะปรากฏ '<,'>!sort --reverse และผลลัพธ์ก็แปลกที่ตรงข้ามกับที่ฉันคาดไว้ ผลลัพธ์มีทั้งแถวที่เรียงลำดับ / …

2
วิธีการวางบล็อกที่มองเห็นเริ่มต้นด้วยบรรทัดอื่น
ฉันใช้เวลานานมากในการตระหนักว่าการวาง (การวาง) สิ่งที่มีpหรือPบล็อกแบบภาพเลือกด้วยctrl+vและดึง (คัดลอก) ด้วยyรักษาลักษณะไว้ก่อนดังนั้นเมื่อข้อความที่คัดลอกอยู่ตรงกลางบรรทัดนั้น จะถูกคัดลอกท่ามกลางข้อความอื่น ๆ เมื่อเป็นไปได้ ในทางตรงกันข้าม select-line ที่มีVไม่วางบรรทัดที่คัดลอกระหว่างข้อความอื่น แต่เริ่มต้นที่บรรทัดอื่น ตัวอย่างเช่นสมมติว่าฉันมี: 12/12: Avocado. Apple. 12/13: Bean. Banana. 12/14: Cherry. Citron. 12/15: 12/16: 12/17: เมื่อฉันต้องการตัดAvocadoและBeanและCherryโดยการเลือก (การเลือกแสดงเป็น_) 12/12: ________ Apple. 12/13: ________ Banana. 12/14: ________ Citron. 12/15: 12/16: 12/17: และกดyและเลื่อนเคอร์เซอร์ไปที่บรรทัดต่อไปนี้ (เคอร์เซอร์แทน_) 12/12: Avocado. Apple. 12/13: Bean. Banana. 12/14: Cherry. Citron. …

1
ชื่อโทเค็น '\%' และ '\ @' ใน vim regex คืออะไร แล้วมันทำอะไร?
ขณะแก้ไขไฟล์ไวยากรณ์ฉันพบสิ่งที่ชอบ: \s*\%(\%(:\@<!\/\/.*\)\=\|\%(\/\*.*\*\/\s*\)*\)$ ฉันคุ้นเคยกับคนอื่นมากกว่า\%และที่\@นั่น ฉันไม่สามารถทำ Google ด้วยซ้ำเพราะไม่รู้ว่าชื่ออะไร ดังนั้นมันคืออะไรและมันทำอะไร?

6
วิธีการเปลี่ยนล่ามไพ ธ อนที่ใช้โดย jedi-vim
ฉันมีAnaconda(รวมถึง python3.5.2), VIM(7.4) และJedi-VIMติดตั้งบนระบบของฉัน นอกจากนี้ยังมีการpythonติดตั้งบนระบบ linux โดยค่าเริ่มต้น การเติมข้อความอัตโนมัติกำลังทำงานบนแพ็คเกจพื้นฐานอย่างน้อยที่สุด แต่สำหรับแพคเกจเช่นnumpy(ซึ่งรวมอยู่ในAnaconda) ความสมบูรณ์ไม่ทำงาน โดยใช้คำสั่งต่อไปนี้ในVIM: :py3 import sys; print(sys.path) ['/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages', '_vim_path_'] นี้แสดงให้เห็นว่าฉันที่ล่ามและแพคเกจไม่เคยถูกนำมาใช้Anaconda-pythonjedi-vim $which python /home/user1/anaconda3/bin/python ฉันจะทำให้ jedi-vim ใช้เส้นทางของ anaconda python ในการรับแพ็คเกจเติมข้อความอัตโนมัติได้อย่างไร

1
ฉันจะไฮไลต์ชื่อการจับคู่“%” (เช่น if / end, for / end) ที่กำหนดโดย matchit.vim ในการเลือกได้อย่างไร
ปัจจุบัน Vim ของฉันเน้นการจับคู่วงเล็บ, เครื่องหมายคำพูด, ฯลฯ ด้วยพื้นหลังสีฟ้าและพื้นหน้าสีขาว - เคอร์เซอร์สามารถเลื่อนไปมาระหว่างสิ่งเหล่านี้%ได้ ขอบคุณ matchit.vim ของฉันฉันยังสามารถสลับกับ%ระหว่าง if / end for / end ฯลฯ - อย่างไรก็ตามสิ่งเหล่านี้ไม่ได้เน้นที่การเลือก ฉันจะไฮไลต์คู่จับคู่เหล่านี้โดยอัตโนมัติเมื่อเลือกได้อย่างไรเช่นจะทำในวงเล็บโดยอัตโนมัติ นอกจากนี้ฉันจะแก้ไขสีพื้นหลังที่ใช้สำหรับคู่เหล่านี้ได้:highlightอย่างไร ขอบคุณล่วงหน้า. ฉันได้อัปเดตคำตอบโดย @Tommy A ด้านล่างเพื่อบัญชีสำหรับmatchit.vimกลุ่มที่ระบุไม่ดีและสถานการณ์อื่น ๆ ที่%ผู้ประกอบการไม่ได้กลับเคอร์เซอร์ไปที่ตำแหน่งเดิมเคย ตรวจสอบความแตกต่างในการวนรอบ "ในขณะที่" ใครก็ตามที่อ่านหัวข้อนี้ควรใช้เวอร์ชั่นนี้เพื่อหลีกเลี่ยงการวนซ้ำไม่ จำกัด : function! s:get_match_lines(line) abort " Loop until `%` returns the original line number; abort if " (1) …

3
ฉันจะแสดงรายการเนื้อหาของรีจิสเตอร์ก่อนวางได้อย่างง่ายดายได้อย่างไร?
ฉันใช้ทะเบียนจำนวนมากสำหรับการคัดลอก / วาง แต่ฉันมักจะลืมว่าการลงทะเบียนเนื้อหาของฉันคืออะไร มีวิธีในการแสดงการลงทะเบียนก่อนวางหรือไม่? เป็นการดีที่มันจะออกจากการลงทะเบียนบนหน้าจอเมื่อเลือกหนึ่งที่เราต้องการ

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