ทำซ้ำคำสั่งโหมดปกติล่าสุดรวมถึงการเคลื่อนไหวใน Vim


25

ในกลุ่มด้วย.ฉันสามารถทำซ้ำคำสั่งโหมดปกติล่าสุดได้ ตัวอย่างเช่น:

dd.

ลบบรรทัดสองครั้ง
แต่ถ้าฉันพิมพ์

5j.

เคอร์เซอร์ไม่เลื่อนลง 10 บรรทัด ฉันจะทำซ้ำคำสั่งโหมดปกติล่าสุดโดยเฉพาะการย้ายได้อย่างไร

คำตอบ:


14

vimไม่ทำอย่างนี้น่าเสียดาย สิ่งที่ดีที่สุดที่คุณสามารถทำได้คือติดตั้งปลั๊กอินrepmo.vimซึ่งทำซ้ำคำสั่งการเคลื่อนไหวที่มีการนับ


11

มันสามารถทำได้แม้ในวานิลลาเป็นกลุ่ม แต่การบังคับใช้ขึ้นอยู่กับกรณีการใช้งานของคุณเช่น ความถี่ที่คุณจะต้องทำซ้ำเนื่องจากต้องใช้การกดแป้นบางครั้งเพื่อให้สามารถทำซ้ำได้


ตัวเลือกที่ 1: เปลี่ยนเป็นการทำงานของโหมดคำสั่ง

โดยใช้การเลื่อนลง 5 บรรทัดเป็นตัวอย่างคุณสามารถทำได้:

  1. ใส่:norm 5jก็จะเลื่อนเคอร์เซอร์ลง 5 บรรทัด
  2. ใช้@:เพื่อทำซ้ำการเคลื่อนไหว

:norm หมายถึงปกติสตริงใด ๆ ต่อไปนี้ถือเป็นการกดแป้นพิมพ์ของคุณภายใต้โหมดปกติ


ตัวเลือก 2: ใช้มาโคร

  1. qa(เก็บแมโครลงในทะเบียนaคุณสามารถเลือกลงทะเบียนของคุณเองเช่นqb, qc)
  2. 5j
  3. q (มาโครบันทึกเสร็จสิ้น)
  4. @aเพื่อทำซ้ำการบันทึกของคุณ (แทนที่aด้วยชื่อการลงทะเบียนที่คุณเลือกเช่น@b, @c)

มาโครต้องการพลังทางวิญญาณมากขึ้นในการตั้งค่า แต่สามารถทำซ้ำได้มากขึ้นในแง่ที่ว่าคุณสามารถจัดเก็บการดำเนินการหลาย ๆ อย่างในรีจิสเตอร์ที่แตกต่างกัน


7

.ทำซ้ำการเปลี่ยนแปลงล่าสุดจริงๆไม่ใช่คำสั่งโหมดปกติล่าสุด ดังที่ Paul กล่าวไว้คุณจะต้องมีปลั๊กอินเพื่อให้คุณทำซ้ำการเคลื่อนไหวได้

ดู " :help ."


4

.คุณสามารถทำซ้ำเปลี่ยนแปลงด้วย การเคลื่อนไหวสามารถทำซ้ำได้ด้วย;คำสั่ง คำสั่งนี้ดูเหมือนจะใหม่และทำสิ่งเดียวกันกับสคริปต์ repmo.vim ที่กล่าวถึงในคำตอบอื่น ๆ

ยกตัวอย่างเช่นที่จะย้ายไปที่สองต่อไปกดc จากนั้นจะทำมันอีกครั้งเพียงแค่พิมพ์2fc;


11
;ไม่ใช่เรื่องใหม่ มันเป็นคำสั่งมาตรฐาน vi Vi จำได้ว่าเป็นประเภทและอักขระเป้าหมาย (แต่ไม่ใช่อาร์กิวเมนต์ที่เป็นตัวเลข) ของf/ F/ t/ Tการเคลื่อนไหวล่าสุดและ;ทำซ้ำ อย่างไรก็ตามมันไม่ได้ทำซ้ำการเคลื่อนไหวอื่น ๆ
pyrocrasty

สิ่งนี้สำเร็จในสิ่งที่ฉันต้องการทำ! ขอขอบคุณ. และขอบคุณ @pyrocrasty สำหรับคำชี้แจง!
พอล

0

คุณสามารถเลือกบรรทัดที่คุณต้องการเปลี่ยนและดำเนินการคำสั่งจุดสุดท้ายปกติ

v5j .............. visual select next 5 lines
:'<,'>norm! .      normal mode execute over selection last command '.'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.