คำถามติดแท็ก repeated-commands

คำถามเกี่ยวกับการเล่นคำสั่งเดิมซ้ำ ซึ่งรวมถึงคำสั่ง dot (.), @ macros, @: และวิธีการที่คล้ายกัน

2
ฉันจะดูและแก้ไขการบันทึกของฉัน (เช่นมาโครที่บันทึกไว้) ได้อย่างไร
ฉันใช้ซ้ำที่ซับซ้อนในการบันทึกการดำเนินงานของฉัน ( qqเพื่อบันทึกการดำเนินการบาง , qการหยุด) และฉันไม่ผิดพลาด เป็นไปได้ไหมที่จะเห็นสิ่งที่ฉันบันทึกและแก้ไขข้อผิดพลาดแทนที่จะทำอีกครั้ง? เรียกใช้ตัวละครที่บันทึกไว้ตาม@qผลงาน แต่ฉันไม่เห็นในการแม็พ ( :map q- No mapping found) :help recordingและมีข้อมูลไม่มากในการช่วยเหลือโดยการพิมพ์:

4
ฉันสามารถทำซ้ำคำสั่ง UI ล่าสุดได้หรือไม่
ฉันรู้ว่าฉันสามารถใช้.เพื่อทำซ้ำคำสั่งแก้ไขล่าสุด มีวิธีการทำซ้ำคำสั่งการจัดการ UI ล่าสุดหรือไม่ ตัวอย่างเช่นฉันสามารถเขียน10<C-W>-เพื่อลดขนาดหน้าต่างสิบแถว มันดีที่จะสามารถกด⟨ บางปุ่ม ⟩เพื่อทำซ้ำคำสั่งนี้ได้อย่างง่ายดายหากฉันต้องการลดขนาดมันอีก

3
วิธีแทนที่อักขระมากกว่าหนึ่งตัวโดยไม่ต้องเข้าสู่โหมดแทรก
ฉันมีไฟล์ที่มีบรรทัดที่มีลักษณะดังนี้: foofoo.xy.barbar ฉันต้องการที่จะเปลี่ยนไปxy ghฉันพยายามทำ2r-> ghแต่เห็นได้ชัดว่าไม่ได้ผลเพราะมันแทนที่xyด้วยggแล้วเลื่อนเคอร์เซอร์ไปทางซ้ายหนึ่งจุด มีวิธีการนี้หรือไม่โดยไม่ต้องเข้าสู่โหมดแทรกหรือไม่ใช้การกดแป้นมากขึ้น (เช่น:s/xy/gh/)?

2
ฉันจะแทรกตัวละครซ้ำ ๆ ได้อย่างไรแม้กระทั่งบรรทัดถัดไป
บอกว่าฉันมีความคิดเห็นเช่นนี้: //This is a comment และฉันต้องการทำให้เป็นเช่นนี้: //***************** //This is a comment //***************** มีวิธีง่าย ๆ ในการแทรกตัวอักษรซ้ำ ๆ กันแม้กระทั่งกับบรรทัดถัดไป / ก่อนหน้า?

3
วิธีแทรกข้อความซ้ำ ๆ ที่มีความแตกต่างเล็กน้อยในกลุ่ม?
ฉันต้องการแทรกข้อความแบบนี้: similar text wordA similar text ... similar text wordB similar text ... similar text wordC similar text ... ฉันรู้ว่าฉันสามารถวางข้อความได้หลายครั้งจากนั้นใช้การแทนที่เพื่อเปลี่ยนคำเดียวสำหรับแต่ละบรรทัด แต่ฉันก็ยังพบว่าวิธีนี้ไม่สะดวกมาก มีวิธีการบันทึกคำหรือรายการคำใน "ตัวแปร" แล้วใช้ตัวแปรนี้เพื่อสร้างข้อความที่คล้ายกัน? แก้ไขฉันทำสิ่งที่ไม่ชัดเจนในคำถามต้นฉบับจริง ๆ แล้วฉันพยายามทำให้ฟังก์ชั่นคำนิยามที่เหมือนกันดังนั้นwordA wordB... อาจปรากฏหลายครั้งในแต่ละโคลนของข้อความและข้อความอาจมีหลายบรรทัด รูปแบบเป็นเช่นนี้: similar_text1 wordA similar_text2 wordA similar_text3 ... similar_text1 wordB similar_text2 wordB similar_text3 ... similar_text1 wordC similar_text2 wordC similar_text3 ... (ข้อความอาจมีบรรทัดใหม่และ wordA, …

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 และทำซ้ำได้@@แต่โซลูชันนี้ไม่เหมาะเพราะคุณต้องวางแผนล่วงหน้ามาตลอดในขณะที่ในทางปฏิบัติคุณมักจะไม่รู้ว่าคุณต้องทำซ้ำจนกว่าจะถึงเวลา คุณทำมันแล้ว มีวิธีใดบ้างที่จะบรรลุสิ่งที่ฉันต้องการ รางวัลชมเชย: หากเป็นไปไม่ได้มีวิธีการเล่นแมโครครั้งสุดท้ายซ้ำอีกครั้งหรือไม่? เช่นหากฉันพิมพ์@@เพื่อเล่นแมโครสุดท้ายของฉันฉันต้องการให้สิ่งต่อ.ไปนี้เทียบเท่ากับการพิมพ์@@อีกครั้งซึ่งไม่ได้ (เช่นหากผลลัพธ์@@ขึ้นอยู่กับบรรทัดที่คุณอยู่)

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
บันทึกการกระทำล่าสุด (.) ในแมโคร
ใช้ Case ฉันอยู่ในโหมดปกติ ฉันไม่ได้คิดอย่างชัดเจนเกี่ยวกับการบันทึกแมโคร แต่ฉันเปลี่ยนคำสั่งเดียว ตอนนี้ฉันสามารถทำซ้ำการกระทำนี้โดยใช้จุด ตอนนี้ฉันรู้ว่ามันเป็นการกระทำที่มีประโยชน์ในการบันทึกในแมโครเพื่อใช้ในภายหลังแทนที่จะพิมพ์คำสั่งทั้งหมดทุกครั้ง ฉันสามารถเข้าร่วมการเปลี่ยนแปลงทั้งหมดที่จำเป็นต้องใช้คำสั่งนี้ในขณะนี้โดยใช้จุดหรือฉันสามารถดำเนินการแก้ไขและใช้คำสั่งนี้ในภายหลังโดยการบันทึกในแมโคร สิ่งหลังคือสิ่งที่ฉันต้องการทำ แต่วิธีที่ง่ายที่สุดที่ฉันสามารถทำได้ไม่ใช่เรื่องง่าย - เลิกทำการเปลี่ยนแปลงเริ่มบันทึกแมโครและพิมพ์คำสั่งอีกครั้งเพื่อทำการเปลี่ยนแปลงที่ต้องการและหยุดการบันทึกแมโคร สิ่งที่ฉันได้พยายามมาแล้ว: การบันทึกจุดในมาโครไม่ทำงานเนื่องจากบันทึกจุดและไม่ใช่การเปลี่ยนแปลงจุดที่ดำเนินการ (ตัวอย่างเช่นสมมติว่าคำสั่งที่เก็บไว้ในจุดคือd5wถ้าคุณเริ่มบันทึกแมโครและดำเนินการผ่านคาดว่ามันจะลบ 5 คำทุกครั้งที่คุณเรียกใช้แมโครจากนั้นจะไม่เกิดขึ้นในครั้งถัดไปที่คุณเรียกใช้ แมโครมันจะทำจุดและไม่ใช่คำสั่งd5wซึ่งหมายความว่าถ้าคุณทำการเปลี่ยนแปลงอื่น ๆ หลังจากบันทึกแมโคร - พูดว่าลบคำ 3 คำที่ใช้d3wและเป็นการเปลี่ยนแปลงครั้งสุดท้ายที่คุณทำแล้วเมื่อคุณเรียกใช้แมโครมันจะลบ 3 คำศัพท์และไม่ใช่ 5 เพราะมันกำลังทำงานอยู่.)

1
ฉันจะป้องกัน (หรืออย่างน้อยพร้อมท์เพื่อยืนยัน) จำนวนมากอย่างไร้เหตุผลจากการใช้คำสั่งคำนำหน้าได้อย่างไร
มันไม่ได้เกิดขึ้นบ่อยเท่าที่คุณคิด แต่มันเกิดขึ้นเป็นครั้งคราวและฉันก็ไม่ได้เป็นเจ้าของแมว โดยทั่วไปถ้าคุณบดแถวหมายเลขหรือ numpad จากนั้นกด keycombo ที่เรียกคำสั่งที่ทำซ้ำได้คุณสามารถสั่ง Vim โดยไม่ตั้งใจเพื่อทำงานหลายพันล้านหรือแม้กระทั่งพันล้านครั้ง สิ่งนี้จะควบคุมไม่ได้ง่ายและอาจทำให้ข้อมูลสูญหายได้ ดังนั้นฉันสงสัยว่ามีการกำหนดค่าหรือบางสิ่งในซอร์สโค้ดที่เราสามารถเปลี่ยนเพื่อทำหน้าที่เป็นการตรวจสุขภาพจิตเพื่อป้องกัน DoS ประเภทนี้หรือไม่

1
ลบหลายบรรทัดตามที่อยู่
ฉันกำลังดูความท้าทายของ vimgolfและฉันคิดว่ามันเป็นการดีที่จะลบบรรทัดที่เฉพาะเจาะจงตามที่อยู่ ฉันรู้ว่าฉันสามารถทำได้ด้วย:<line_number>dแต่จะมีวิธีในการแสดงรายการหมายเลขโทรศัพท์หลายสายเพื่อdให้ทำงานได้หรือไม่ ฉันจินตนาการถึงสิ่งนี้: :1,4,32dแต่แน่นอนว่ามันไม่ทำงาน สิ่งนี้จะเกิดขึ้นได้อย่างไร?

1
การทำความเข้าใจความแตกต่างของการอ้างอิงบรรทัดผ่าน: g / ^ / norm และถึง:% norm
สมมติว่าฉันมีไฟล์ง่าย ๆ ดังต่อไปนี้ a b c d e และฉันตัดสินใจว่าฉันต้องการเพิ่มบรรทัดว่างหลังจากแต่ละบรรทัด วิธีการที่แตกต่างกันหลายอย่างข้ามไปยังใจของฉันทันที เราอาจทำเช่นนั้น (และยอมรับความล้มเหลว) เราอาจบันทึกมาโครที่ชอบqqo<ESC>jqแล้วทำซ้ำหลาย ๆ ครั้ง ในขณะนั้นมีวิธีการสองวิธีที่ชัดเจนกว่าสำหรับฉัน ประการแรกฉันคิดว่าฉันจะออก:normคำสั่งoในแต่ละบรรทัด :%norm oดังนั้นผมจึงวิ่ง แต่สิ่งที่เกิดขึ้นจริงคือเราได้ 5 บรรทัดว่างตามด้วยบรรทัดที่ไม่ได้แยกดังที่กล่าวมา ฉันตีความสิ่งนี้เพื่อหมายความว่าโดย%normvim หยิบข้อความออกมาคำสั่งปกติต่อไปนี้ในห้าบรรทัดแรกของไฟล์ห้าบรรทัดนี้ oคำสั่งสร้างบรรทัดใหม่และเป็นกลุ่มคือ "โง่" ในแง่ที่ว่ามันอ้างอิงจากจำนวน line และไม่จริงโดยระบุอื่น ๆ ฉันเขิน แน่ใจ ฉันลองอีกสองสามอย่างเพื่อดูว่าฉันสามารถใช้วิธีการด้านบนได้หรือไม่ แต่ฉันไม่สามารถทำได้ ด้วยความอยากรู้ฉันได้ลองวิธีการนวดแบบที่ฉันโปรดปราน :g/^/norm oนี้ทำให้ฉันจะลอง ฉันประหลาดใจนี่ใช้งานได้ดี! ดังนั้นสำหรับดวงตาของฉันดูเหมือนว่าเสียงเรียกเข้าไม่ได้ "โง่" ที่นี่ในลักษณะเดียวกับข้างบนและอ้างอิงบรรทัดมากกว่าหมายเลขบรรทัด เกิดอะไรขึ้นกันแน่?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.