ในกลุ่มด้วย.ฉันสามารถทำซ้ำคำสั่งโหมดปกติล่าสุดได้ ตัวอย่างเช่น:
dd.
ลบบรรทัดสองครั้ง
แต่ถ้าฉันพิมพ์
5j.
เคอร์เซอร์ไม่เลื่อนลง 10 บรรทัด ฉันจะทำซ้ำคำสั่งโหมดปกติล่าสุดโดยเฉพาะการย้ายได้อย่างไร
ในกลุ่มด้วย.ฉันสามารถทำซ้ำคำสั่งโหมดปกติล่าสุดได้ ตัวอย่างเช่น:
dd.
ลบบรรทัดสองครั้ง
แต่ถ้าฉันพิมพ์
5j.
เคอร์เซอร์ไม่เลื่อนลง 10 บรรทัด ฉันจะทำซ้ำคำสั่งโหมดปกติล่าสุดโดยเฉพาะการย้ายได้อย่างไร
คำตอบ:
vimไม่ทำอย่างนี้น่าเสียดาย สิ่งที่ดีที่สุดที่คุณสามารถทำได้คือติดตั้งปลั๊กอินrepmo.vimซึ่งทำซ้ำคำสั่งการเคลื่อนไหวที่มีการนับ
มันสามารถทำได้แม้ในวานิลลาเป็นกลุ่ม แต่การบังคับใช้ขึ้นอยู่กับกรณีการใช้งานของคุณเช่น ความถี่ที่คุณจะต้องทำซ้ำเนื่องจากต้องใช้การกดแป้นบางครั้งเพื่อให้สามารถทำซ้ำได้
โดยใช้การเลื่อนลง 5 บรรทัดเป็นตัวอย่างคุณสามารถทำได้:
:norm 5jก็จะเลื่อนเคอร์เซอร์ลง 5 บรรทัด@:เพื่อทำซ้ำการเคลื่อนไหว:norm หมายถึงปกติสตริงใด ๆ ต่อไปนี้ถือเป็นการกดแป้นพิมพ์ของคุณภายใต้โหมดปกติ
qa(เก็บแมโครลงในทะเบียนaคุณสามารถเลือกลงทะเบียนของคุณเองเช่นqb, qc)5jq (มาโครบันทึกเสร็จสิ้น)@aเพื่อทำซ้ำการบันทึกของคุณ (แทนที่aด้วยชื่อการลงทะเบียนที่คุณเลือกเช่น@b, @c)มาโครต้องการพลังทางวิญญาณมากขึ้นในการตั้งค่า แต่สามารถทำซ้ำได้มากขึ้นในแง่ที่ว่าคุณสามารถจัดเก็บการดำเนินการหลาย ๆ อย่างในรีจิสเตอร์ที่แตกต่างกัน
.ทำซ้ำการเปลี่ยนแปลงล่าสุดจริงๆไม่ใช่คำสั่งโหมดปกติล่าสุด ดังที่ Paul กล่าวไว้คุณจะต้องมีปลั๊กอินเพื่อให้คุณทำซ้ำการเคลื่อนไหวได้
ดู " :help ."
.คุณสามารถทำซ้ำเปลี่ยนแปลงด้วย การเคลื่อนไหวสามารถทำซ้ำได้ด้วย;คำสั่ง คำสั่งนี้ดูเหมือนจะใหม่และทำสิ่งเดียวกันกับสคริปต์ repmo.vim ที่กล่าวถึงในคำตอบอื่น ๆ
ยกตัวอย่างเช่นที่จะย้ายไปที่สองต่อไปกดc จากนั้นจะทำมันอีกครั้งเพียงแค่พิมพ์2fc;
คุณสามารถเลือกบรรทัดที่คุณต้องการเปลี่ยนและดำเนินการคำสั่งจุดสุดท้ายปกติ
v5j .............. visual select next 5 lines
:'<,'>norm! . normal mode execute over selection last command '.'
;ไม่ใช่เรื่องใหม่ มันเป็นคำสั่งมาตรฐาน vi Vi จำได้ว่าเป็นประเภทและอักขระเป้าหมาย (แต่ไม่ใช่อาร์กิวเมนต์ที่เป็นตัวเลข) ของf/F/t/Tการเคลื่อนไหวล่าสุดและ;ทำซ้ำ อย่างไรก็ตามมันไม่ได้ทำซ้ำการเคลื่อนไหวอื่น ๆ