ในกลุ่มด้วย.
ฉันสามารถทำซ้ำคำสั่งโหมดปกติล่าสุดได้ ตัวอย่างเช่น:
dd.
ลบบรรทัดสองครั้ง
แต่ถ้าฉันพิมพ์
5j.
เคอร์เซอร์ไม่เลื่อนลง 10 บรรทัด ฉันจะทำซ้ำคำสั่งโหมดปกติล่าสุดโดยเฉพาะการย้ายได้อย่างไร
ในกลุ่มด้วย.
ฉันสามารถทำซ้ำคำสั่งโหมดปกติล่าสุดได้ ตัวอย่างเช่น:
dd.
ลบบรรทัดสองครั้ง
แต่ถ้าฉันพิมพ์
5j.
เคอร์เซอร์ไม่เลื่อนลง 10 บรรทัด ฉันจะทำซ้ำคำสั่งโหมดปกติล่าสุดโดยเฉพาะการย้ายได้อย่างไร
คำตอบ:
vim
ไม่ทำอย่างนี้น่าเสียดาย สิ่งที่ดีที่สุดที่คุณสามารถทำได้คือติดตั้งปลั๊กอินrepmo.vimซึ่งทำซ้ำคำสั่งการเคลื่อนไหวที่มีการนับ
มันสามารถทำได้แม้ในวานิลลาเป็นกลุ่ม แต่การบังคับใช้ขึ้นอยู่กับกรณีการใช้งานของคุณเช่น ความถี่ที่คุณจะต้องทำซ้ำเนื่องจากต้องใช้การกดแป้นบางครั้งเพื่อให้สามารถทำซ้ำได้
โดยใช้การเลื่อนลง 5 บรรทัดเป็นตัวอย่างคุณสามารถทำได้:
:norm 5j
ก็จะเลื่อนเคอร์เซอร์ลง 5 บรรทัด@:
เพื่อทำซ้ำการเคลื่อนไหว:norm
หมายถึงปกติสตริงใด ๆ ต่อไปนี้ถือเป็นการกดแป้นพิมพ์ของคุณภายใต้โหมดปกติ
qa
(เก็บแมโครลงในทะเบียนa
คุณสามารถเลือกลงทะเบียนของคุณเองเช่นqb
, qc
)5j
q
(มาโครบันทึกเสร็จสิ้น)@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
การเคลื่อนไหวล่าสุดและ;
ทำซ้ำ อย่างไรก็ตามมันไม่ได้ทำซ้ำการเคลื่อนไหวอื่น ๆ