Vi & Vim

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

7
เป็นไปได้ไหมที่จะทำให้ Vim บันทึกไฟล์อัตโนมัติ?
โปรแกรมประมวลผลคำและโปรแกรมแก้ไขข้อความอัตโนมัติบันทึกไฟล์ที่เราแก้ไขเป็นระยะ ๆ ซึ่งสะดวกมากสำหรับการเอาตัวรอดจากการล่มที่น่ารังเกียจ ฯลฯ มีวิธีทำให้ Vim บันทึกไฟล์ของเราโดยอัตโนมัติหรือไม่?

3
เหตุใดฉันจึงควรใช้ augroup
ฉันเข้าใจว่าคำสั่งอัตโนมัติทำงานอย่างไรและใช้งานอย่างไร แต่ฉันก็ค่อนข้างแน่ใจว่าเป็นกลุ่มใด ฉันอ่าน:help augroup *:aug* *:augroup* :aug[roup] {name} Define the autocmd group name for the following ":autocmd" commands. The name "end" or "END" selects the default group. To avoid confusion, the name should be different from existing {event} names, as this most likely will not do what you intended. สิ่งนี้ไม่ได้อธิบายว่าทำไมพวกเขาถึงมีประโยชน์หรือทำไมฉันต้องการสร้างชื่อกลุ่มข้อความอัตโนมัติและเพียงแค่กำหนดกลุ่มข้อความอัตโนมัติที่อยู่ติดกัน …
31 autocmd 

1
ขยายการเลือกภาพในทิศทางอื่น
บางครั้งฉันได้เลือกตัวเลือกที่มองเห็นด้วยตัวอย่างเช่นVjjjjjเท่านั้นที่จะตระหนักในภายหลังว่าฉันควรจะเริ่มต้นการเลือกหนึ่งบรรทัดที่สูงกว่า อย่างไรก็ตามการกดkเพียงแค่ลดช่วงการเลือกที่ต่ำลงแทนที่จะเลื่อนการเลือกทั้งหมดขึ้นหนึ่งบรรทัด ต่อไปนี้เป็นization ภาพ (ฮ่า, ฮ่า) ซึ่งเส้นหนาเป็นเส้นที่ฉันเลือก: อย่าเลือกบรรทัดนี้ อย่าเลือกบรรทัดนี้ เลือกบรรทัดนี้! เลือกบรรทัดนี้! <- ฉันกดตรงVนี้ ... เลือกบรรทัดนี้! เลือกบรรทัดนี้! เลือกบรรทัดนี้! เลือกบรรทัดนี้! <- ... และย้ายไปที่นี่ แต่ฉันควรจะเริ่มต้นของฉัน อย่าเลือกการเลือกบรรทัดนี้หนึ่งบรรทัดที่สูงกว่า! อย่าเลือกบรรทัดนี้ ฉันจะขยายการเลือกภาพโดยการเลื่อนจุดเริ่มต้นไปในทิศทางอื่นได้อย่างไร? หากเป็นไปไม่ได้มีวิธีเพิ่มการแมปใน. vimrc ของฉันที่ทำให้ฉันทำเช่นนั้นได้หรือไม่?

7
แสดงเส้นที่ตรงกันเท่านั้นหรือ
ในไฟล์ขนาดยาวฉันต้องการค้นหารูปแบบที่จะจับคู่ประมาณ 200 บรรทัดหรือมากกว่านั้น บรรทัดที่จับคู่อยู่ในตำแหน่งสุ่มในไฟล์ เมื่อบรรทัดตรงกันเฉพาะบรรทัดนั้นเกี่ยวข้องเท่านั้นไม่มีบริบทด้านบนหรือด้านล่าง ปกติผมจะค้นหาด้วยและกระโดดผ่านการแข่งขันด้วย/ แต่นั่นหมายความว่ามีเพียงหนึ่งหรือสองบรรทัดที่เกี่ยวข้องบนหน้าจอในแต่ละครั้ง n มีวิธีซ่อนทุกบรรทัดที่ไม่ตรงกันหรือไม่ในขณะที่กำลังดูรายการของบรรทัดผลลัพธ์ วิธีเดรัจฉานบังคับจะเป็นการลบบรรทัดที่ไม่ตรงกันทั้งหมดและยกเลิกการลบนั้นในภายหลัง แต่มันก็น่าเกลียดในหลาย ๆ ทางแม้ว่ามันจะไม่จบลงด้วยการเลิก ...
31 search 

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

5
เทอร์มินัล borked หลังจากเรียกใช้ Vim ด้วย xargs
บางครั้งฉันพยายามเรียกใช้ Vim โดยใช้วิธีxargsนี้: find . -name '*.java' | xargs vim …งานประเภทใด: เมื่อ Vim เปิดตัวฉันจะเห็นแฟลชคำเตือนต่อไปนี้สั้น ๆ : Vim: Warning: Input is not from a terminal การแก้ไขการทำงาน - :filesระบุ.javaไฟล์ทั้งหมดอย่างถูกต้องตามที่คาดไว้ ฉันสามารถบันทึกและออกจาก อย่างไรก็ตามหลังจากออกจาก Vim เทอร์มินัลของฉันถูก borked: สิ่งที่ฉันพิมพ์ที่ shell prompt ไม่ได้สะท้อน การขึ้นบรรทัดใหม่จะไม่ปรากฏเลยและบางครั้งการป้อนบรรทัดก็จะปรากฏขึ้น สิ่งนี้จะดำเนินต่อไปจนกว่าฉันจะออกreset(1)คำสั่งเพื่อกำหนดค่าเริ่มต้นใหม่ให้กับเทอร์มินัล นี่เป็นข้อผิดพลาด Vim หรือมีคำอธิบายที่น่าพอใจมากกว่าสำหรับสาเหตุที่มันโต้ตอบกับเทอร์มินัลเช่นนั้น? ฉันเคยเห็นมันเกิดขึ้นใน Vim จนถึงเวอร์ชัน 7.3 (ดูเหมือนว่าจะไม่มีความหมาย) บน Linux และ Unices …

1
ใช้ตัวดำเนินการตามเงื่อนไข AND หรือ OR ในคำสั่ง IF หรือไม่
นี่อาจเป็นคำถามง่าย ๆ อย่างเหลือเชื่อ แต่ฉันไม่พบคำตอบใด ๆ (ฉันต้องขาดแหล่งข้อมูลที่ถูกต้องและฉันไม่รู้ว่าจะค้นหาด้วยความช่วยเหลือของกลุ่มใด) ฉันมีเงื่อนไขและฉันต้องการให้รวม 'และ' เช่น if (condition1 .AND. condition2) "do what I want you to do endif แต่ฉันไม่พบไวยากรณ์ สิ่งเดียวกันสำหรับ 'OR'
30 vimscript 

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

5
สลับตำแหน่งของหน้าต่างทั้งสอง
สมมติว่าสิ่งต่อไปนี้เป็นโครงสร้างปัจจุบันของหน้าต่างของฉัน: + ----- + ---------------------------- | | | A | | | + ----- + | | | B | คำสั่งของ A และ B นั้นค่อนข้างไม่เป็นธรรมชาติ มันจะดีกว่าถ้า B อยู่ด้านบน อย่างไรก็ตามถ้าฉันไป<C-w>KB จะเป็นหน้าต่างที่ยอดเยี่ยมที่สุดซึ่งไม่ใช่สิ่งที่ฉันต้องการ ฉันจะวาง B ไว้เหนือ A แต่ไม่ได้อยู่เหนือหน้าต่างอื่นที่อยู่เหนือ A ได้อย่างไร และหากหน้าต่างสองบานถูกแยกในแนวตั้งฉันจะเปลี่ยนหน้าต่างเป็นแนวนอนได้อย่างไร

4
ฉันจะถือว่าคำพูดของ LaTeX เป็นวัตถุข้อความได้อย่างไร
เครื่องหมายอัญประกาศใน LaTeX นั้นแตกต่างจากข้อความปกติโดยมีการจัดรูปแบบ``like this''(หรือ`like this'สำหรับเครื่องหมายคำพูดเดี่ยว) ทำให้ยากที่จะสำรวจพวกมันเป็นกลุ่ม ฉันมักจะใช้สิ่งที่ชอบT`ct'(ย้อนหลังจนกระทั่ง`เปลี่ยนไป') อย่างไรก็ตามนี่เป็น clunky และผิดธรรมชาติ ฉันชอบที่จะสามารถที่จะใช้สิ่งที่ตามสายของciq( "การเปลี่ยนแปลงในคำพูด") เช่นเดียวกับที่ฉันสามารถทำได้ciw, ca), ci", ca'ฯลฯ มีวิธีใดบ้างที่จะบอก Vim ให้``LaTeX'' `quotes'ถือเป็นวัตถุข้อความ? (ในฐานะที่เป็นข้อดีมีวิธีใดบ้างที่จะทริกเกอร์สิ่งนี้ขณะแก้ไข.texไฟล์?)

4
ฉันจะทำให้ Vim ทำการติดตั้งอัตโนมัติในขณะที่ไม่มีโฟกัสได้อย่างไร?
ฉันใช้ VIm สำหรับทุกสิ่ง (หรือ gVim ในกรณีนี้) รวมถึงเอาต์พุตการตรวจสอบที่เขียนลงไฟล์ ฉันใช้autoreadเพื่อทำให้ Vim อ่านไฟล์อีกครั้งซึ่งจะทำทุกครั้งที่ฉันสลับโฟกัสของแป้นพิมพ์ไปที่ไฟล์นั้น มีวิธีใดที่จะทำให้ Vim อัปเดตบัฟเฟอร์แม้ว่าฉันจะไม่เปลี่ยนโฟกัสของแป้นพิมพ์ ฉันลองตั้งค่าแล้วchecktimeแต่ดูเหมือนจะไม่มีผลกระทบใด ๆ ในขณะที่โฟกัสของแป้นพิมพ์อยู่ที่อื่น เอาท์พุทฉันกำลังตรวจสอบคือการแทนที่ไฟล์ออกอย่างสมบูรณ์ และฉันไม่ได้มองtail -fมัน มีตัวเลือกอื่น ๆ เช่นการlessไพพ์อินสแตนซ์ใหม่ทุกครั้งหรือการไพพ์ลงไปหรือบางสิ่งบางอย่าง แต่มันก็เจ๋งถ้ามันสามารถทำได้ด้วย VIm
29 filesystem 

2
ความแตกต่างระหว่างการปล่อยและการตั้งค่าคืออะไร?
ฉันไม่รู้ทฤษฎีเบื้องหลัง Vim มากนัก ดูเหมือนว่าเราsetมีตัวแปรและletตัวแปรอื่น ๆ ความแตกต่างคืออะไรและเมื่อใดที่หนึ่งต้องการมากกว่าอีกอันหนึ่ง? นอกจากนี้ solarchim vim colours พูดกับlet g:blabla...ความสำคัญของg:ในกรณีนี้คืออะไร?
29 vimrc  vimscript 

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

2
ทำไม Y จึงเป็นคำพ้องความหมายสำหรับ yy แทนที่จะเป็น y $
มีเหตุผลทางประวัติศาสตร์ที่เฉพาะเจาะจงสำหรับสิ่งนี้หรือไม่? ความเป็นมา - (คุณสามารถข้ามส่วนนี้ได้หากคุณเข้าใจคำถามนี้ไปแล้ว) ในฐานะที่เป็นสื่อกลาง / ขั้นสูงviผู้ใช้จะรู้ว่าyคือ "งัดคำสั่ง" มัน yanks (สำเนา) ข้อความที่ระบุโดยคำสั่งการเคลื่อนไหวต่อไป. * ดังนั้นyeyanks ไปยังจุดสิ้นสุดของคำ, y0yanks จากตำแหน่งเคอร์เซอร์ไปยังจุดเริ่มต้นของบรรทัดy_ดึงเส้นปัจจุบันทั้งหมดy$ออกจากตำแหน่งเคอร์เซอร์จนถึงจุดสิ้นสุดของบรรทัดปัจจุบันเป็นต้น dคำสั่ง (ลบ) และcคำสั่ง (เปลี่ยนแปลง) ทั้งสองจะสามารถนำมาใช้กับทุกการเคลื่อนไหวเหล่านี้เช่นกัน ddเป็นคำพ้องสำหรับd_และลบบรรทัดปัจจุบันทั้งหมด ในทำนองเดียวกันccก็เป็นคำพ้องความหมายสำหรับc_และจะเปลี่ยนบรรทัดปัจจุบัน (เช่นมันจะลบข้อความทั้งหมดและทำให้คุณอยู่ในโหมดแทรกที่จุดเริ่มต้นของบรรทัด). ** คำสั่ง "กระชาก" เป็นไปตามอนุสัญญานี้ จะงัดบรรทัดปัจจุบันทั้งหมดเช่นเดียวกับyyy_ มีอีกหนึ่งชุดของคำพ้องความหมาย: Dเป็นคำพ้องความหมายสำหรับd$และจะลบจากตำแหน่งเคอร์เซอร์ไปยังจุดสิ้นสุดของบรรทัด Cเป็นคำพ้องความหมายc$และจะเปลี่ยนข้อความจากตำแหน่งเคอร์เซอร์เป็นจุดสิ้นสุดของบรรทัดวางคุณในโหมดแทรกเพื่อพิมพ์ข้อความใหม่ อย่างไรก็ตามYเป็นคำพ้องความหมายอื่นสำหรับyyหรือy_และจะดึงทั้งบรรทัดไม่ใช่เฉพาะจากเคอร์เซอร์จนถึงท้ายบรรทัดตามที่คุณคาดหวังจากCและDรูปแบบ ฉันเข้าใจว่าใน Vim มันถูกเก็บไว้เป็นวิธีนี้เพื่อรักษาความเข้ากันได้ย้อนหลังกับviตามที่กล่าวไว้ในความช่วยเหลือ Vim ภายใต้:help Y: หากคุณต้องการให้ "Y" ทำงานจากเคอร์เซอร์จนถึงจุดสิ้นสุดของบรรทัด (ซึ่งมีเหตุผลมากกว่า แต่ไม่รองรับ Vi) ให้ใช้ ": map Y …

4
มีวัตถุข้อความสำหรับบัฟเฟอร์ทั้งหมดหรือไม่
ฉันมักจะพบว่าตัวเองพิมพ์คำสั่งเช่นgg"+yGหรือggdGต้องการวิธีที่มีประสิทธิภาพมากขึ้นโดยไม่ต้องเลื่อนเคอร์เซอร์สองครั้ง มีคำสั่งใดบ้างที่ฉันสามารถใช้เช่นy[movement]เพื่อคัดลอกบัฟเฟอร์ทั้งหมดโดยไม่ย้ายเคอร์เซอร์?

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