การรวมลำดับคำสั่งบันเดิลเข้าด้วยกันเพื่อทำซ้ำ (.)


10

พิจารณา:

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

มีวิธีใดบ้างที่จะบรรลุสิ่งที่ฉันต้องการ

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


ฉันไม่ทราบวิธีแก้ปัญหาสำหรับส่วนแรกของปัญหาของคุณ แต่สำหรับส่วนที่สองคุณสามารถลองทำแผนที่นี้: nno <silent> @@ @@:sil! call repeat#set('@@', v:count1)<CR>แต่เพื่อให้ใช้งานได้คุณต้องติดตั้งปลั๊กอินนี้: github.com/tpope/vim-repeat
user9433424

คำตอบ:


4

เป็นกลุ่มเดียวที่เก็บสุดท้ายคำสั่งดำเนินการและมีเพียงที่ได้รับซ้ำ.; ในความคิดของฉันมีสิ่งอื่นที่จะจัดการได้ยาก

หากคุณรู้สึกว่าจำเป็นต้องทำYpคำสั่งผสมซ้ำเป็นเอนทิตีเดียวคุณต้องทำให้มันเป็นคำสั่งเดียว ปลั๊กอิน repeat.vimของ Tim Pope อนุญาตให้ทำเช่นนั้นได้อย่างง่ายดายสำหรับการจับคู่ที่กำหนดเอง แน่นอนถ้าคุณเลือกคีย์ลัด [ลำดับ] สำหรับการจับคู่คุณสามารถพิมพ์ได้อย่างรวดเร็ว (แทน.) และแม้แต่หลีกเลี่ยงการรวม repeat.vim

BTW, ปลั๊กอิน LineJugglerของฉันมี]dการจับคู่เพื่อทำสำเนาบรรทัดปัจจุบันและสนับสนุนการทำซ้ำผ่าน repeat.vim


2

ในYpเพียง "การเปลี่ยนแปลง" pเพื่อเป็นซ้ำ วิธีเดียวที่ฉันรู้ที่จะปรับเปลี่ยนพฤติกรรมของ.ในโหมดปกติคือการเพิ่มyไปยังcpoptionsตัวเลือก:

set cpoptions+=y

ซึ่งช่วยให้คุณทำซ้ำงัดสุดท้ายเช่นเดียวกับการเปลี่ยนแปลงครั้งสุดท้าย

แต่นั่นไม่ได้เปลี่ยนแปลงอะไรเลยกับปัญหาของคุณเพราะYpยังคงมีสองคำสั่ง: งัดตามด้วยการเปลี่ยนแปลง

ฉันไม่คิดว่าคุณจะได้รับสิ่งที่คุณต้องการโดยไม่มีการเขียนสคริปต์ที่ไม่สำคัญ คุณดูที่บทสคริปต์ของ vim.orgหรือไม่


1

ฉันมักใช้mapเพื่อให้ได้ผลนี้ ตัวอย่างเช่น:

map <F12> Yp

จากนั้นกดF12ซ้ำ ๆ จะทำงานYpYpYpเป็นต้นหากคุณต้องการย้ายไปยังบรรทัดถัดไปหลังจากวางทุกครั้งให้จับคู่คีย์เพื่อYp+แทน


1

contraption โดดเด่นที่เป็นRepeatLastปลั๊กอิน (โดยเราเองมาก@joeytwiddle ) ให้เป็นเพียงแค่การทำงานนี้ผ่านทางวิธีการชั่วร้ายของการบันทึกทุกอย่างที่คุณทำเป็นแมโคร

มันมีจำนวนของแมปใหม่ แต่ถ้าฉันอ่านเอกสารอย่างถูกต้องในการดำเนินการแก้ไขที่คุณอธิบายคุณสามารถใช้ลำดับของคำสั่ง (ทะนงคุณกำลังใช้ค่าเริ่มต้น<leader>ของ\):

  • Ypงัดและใส่ / วางสายapple,
  • jเลื่อนลงหนึ่งบรรทัดเพื่อให้เคอร์เซอร์อยู่บนpearบรรทัด
  • \Dลืมjคำสั่ง
  • 2\.ทำซ้ำสองคำสั่งYและp

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