วิธีการวางบล็อกที่มองเห็นเริ่มต้นด้วยบรรทัดอื่น


10

ฉันใช้เวลานานมากในการตระหนักว่าการวาง (การวาง) สิ่งที่มีpหรือPบล็อกแบบภาพเลือกด้วยctrl+vและดึง (คัดลอก) ด้วยyรักษาลักษณะไว้ก่อนดังนั้นเมื่อข้อความที่คัดลอกอยู่ตรงกลางบรรทัดนั้น จะถูกคัดลอกท่ามกลางข้อความอื่น ๆ เมื่อเป็นไปได้ ในทางตรงกันข้าม select-line ที่มีVไม่วางบรรทัดที่คัดลอกระหว่างข้อความอื่น แต่เริ่มต้นที่บรรทัดอื่น

ตัวอย่างเช่นสมมติว่าฉันมี:

12/12: Avocado. Apple.
12/13: Bean.    Banana.
12/14: Cherry.  Citron.
12/15:
12/16:
12/17:

เมื่อฉันต้องการตัดAvocadoและBeanและCherryโดยการเลือก (การเลือกแสดงเป็น_)

12/12: ________ Apple.
12/13: ________ Banana.
12/14: ________ Citron.
12/15:
12/16:
12/17:

และกดyและเลื่อนเคอร์เซอร์ไปที่บรรทัดต่อไปนี้ (เคอร์เซอร์แทน_)

12/12: Avocado. Apple.
12/13: Bean.    Banana.
12/14: Cherry.  Citron.
_2/15:
12/16:
12/17:

Pและกด มันผลลัพธ์:

12/12: Avocado. Apple.
12/13: Bean.    Banana.
12/14: Cherry.  Citron.
Avocado.12/15:
Bean.   12/16:
Cherry. 12/17:

แต่สิ่งที่ฉันต้องการคือ:

12/12: Avocado. Apple.
12/13: Bean.    Banana.
12/14: Cherry.  Citron.
Avocado.
Bean.   
Cherry. 
12/15:
12/16:
12/17:

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

ดูเหมือนว่าวิธีที่ดีที่สุดในการวางสิ่งที่เริ่มต้นในอีกบรรทัดหนึ่งคือการย้ายเคอร์เซอร์ไปที่จุดเริ่มต้นด้วย0และลง 3 บรรทัดไปยังตำแหน่งใหม่ และเข้าสู่โหมดแทรกด้วยiและกด<return>3 ครั้งและเลื่อนเคอร์เซอร์ไปด้านหลัง 6 บรรทัดและขวากลับไปที่ตำแหน่งเดิม และคัดลอกและย้ายไปยังสถานที่ใหม่อีกครั้งและวางตามที่ฉันทำข้างต้น

ฉันสามารถบันทึกการสโตรกสองสามครั้งได้ไหม หรือคุณมักจะทำอะไร

(แก้ไข: สิ่งที่กล่าวข้างต้นคือวิธีที่ฉันเข้าใจในทันทีที่ฉันถามสิ่งนี้ดูคำตอบสำหรับคำอธิบายที่ถูกต้อง:)

คำตอบ:


11

เมื่อคุณคัดลอกข้อความมันจะเข้าสู่การลงทะเบียน ข้อความภายในทะเบียนมีประเภท: characterwise, หรือlinewiseblockwise

ประเภทนี้กำหนดวิธีที่จะใส่ข้อความ

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


หากคุณต้องการวางเป็นลำดับบรรทัดแทนที่จะบล็อกมี 3 วิธี

  1. C-r "จากโหมดแทรกคุณสามารถแทรกได้โดยการกดปุ่ม
    มันควรจะแทรกเนื้อหาของการลงทะเบียนที่ไม่มีชื่อราวกับว่ามันเป็นประเภท linewise

  1. จากบรรทัดคำสั่งคุณสามารถใช้ :putคำสั่ง
    :putควรวางข้อความไว้ในรีจิสเตอร์ราวกับว่าประเภทเป็น linewise ไม่ว่าจะเป็นชนิดดั้งเดิมก็ตาม โปรดทราบว่าคุณสามารถส่งชื่อของการลงทะเบียนเป็นอาร์กิวเมนต์เช่นเดียวกับที่อยู่บรรทัดเพื่อระบุบรรทัดด้านล่างที่คุณต้องการให้การลงทะเบียนวาง

ตัวอย่างเช่น:

:42put a

... ควรใส่เนื้อหาของ register aใต้42บรรทัดที่ th

ไม่มีชื่อลงทะเบียนเป็นกลุ่มจะถือว่าคุณต้องการวางลงทะเบียนชื่อ (หรือ+ลงทะเบียนถ้าคุณ tweaked 'clipboard')
และหากไม่มีที่อยู่เป็นกลุ่มจะถือว่าคุณต้องการวางไว้ใต้บรรทัดปัจจุบัน


  1. จากบรรทัดคำสั่งคุณสามารถเปลี่ยนประเภทของการลงทะเบียนที่ไม่มีชื่อด้วยsetreg()ฟังก์ชั่น:

    :call setreg('"', '', 'al')

ที่นี่setreg()ควรผนวกสตริงว่างในการลงทะเบียนที่ไม่มีชื่อ (ขอบคุณaธงที่ส่งผ่านเป็นอาร์กิวเมนต์ที่สาม) และเปลี่ยนประเภทของมันเพื่อ linewise (ขอบคุณlธง)

จากนั้นในโหมดปกติคุณควรวางลงทะเบียนด้วย pคำสั่งปกติราวกับว่า linewise เป็นประเภท


มันไม่ได้เชื่อมโยงโดยตรงกับปัญหาของคุณ แต่เมื่อคุณคัดลอกข้อความบางส่วนมันก็จะเข้าสู่การ0ลงทะเบียน และถ้าคุณเพิ่มมูลค่าunnamedplusให้กับตัวเลือก'clipboard'มันก็จะเข้าสู่การ+ลงทะเบียน

คุณสามารถตรวจสอบประเภทของการลงทะเบียนโดยใช้getregtype()ฟังก์ชั่น:

:echo getregtype('"')

ถ้ามันส่งคืนตัวพิมพ์เล็กvก็หมายความว่าประเภทนั้นเป็นตัวอักษร
ถ้ามันส่งกลับตัวพิมพ์ใหญ่Vก็หมายความว่าประเภทคือ linewise
ถ้ามันกลับ^V{some number}จะหมายถึงประเภทคือ blockwise {some number}และความกว้างของบล็อกคือ


3

ฉันต้องการที่จะ "โยน" ลงทะเบียนเข้าสู่โหมดเนื้อหาบาง (characterwise / linewise / blockwise) จึงมักจะผมเขียนปลั๊กอิน UnconditionalPasteสำหรับมัน มันให้gcp , glpฯลฯ ทางเลือกในตัวคำสั่งวางที่บังคับโหมดบางอย่าง (และรูปแบบอื่น ๆ อีกมากมายในขณะนี้หลายในรูปแบบนี้เช่นการวางกับเข้าร่วมด้วยเครื่องหมายจุลภาคหรือสอบถามตัวอักษร)

ด้วยคุณสามารถใช้glp/ glPเพื่อวางหลัง / ก่อนบรรทัดปัจจุบัน (เป็นบรรทัดใหม่) ไม่ว่าคุณจะดึงข้อความอย่างไร


ผมอิจฉาคุณว่าคุณมีเวลาที่จะเขียนสิ่ง QQ ดังกล่าว :putแต่ผมพอใจกับ (เพิ่มขึ้นเช่นกันคุณ)
Violapterin

@Aminopterin: ฉันตอบว่าบ่อยครั้งฉันมี snipMate ในย่อหน้าแรก ดังนั้นฉันต้องปรับแต่งเล็กน้อย ขอบคุณสำหรับการชื่นชมคำตอบของฉันและ upvote!
Ingo Karkat

โอ้ฉันบอกว่าฉันอิจฉาคุณมีเวลาเขียนปลั๊กอินอย่างโดดเดี่ยวอย่างนี้ราวกับว่าทำอย่างเบา ๆ .... เพียงครึ่งปีที่แล้วฉันเริ่มเขียนโครงการ c ++ เป็นโครงการงานอดิเรกเพื่อบังคับตัวเองให้เรียนรู้การเขียนโปรแกรม และฉันเริ่มใช้ vim ~~
Violapterin

2
@Aminopterin อ่าปลั๊กอินเริ่มต้นจากข้อมูลโค้ดขนาดเล็กที่คัดลอกมาจาก Vimtips และค่อยๆเติบโตขึ้นเรื่อย ๆ เมื่อเวลาผ่านไป เมื่อพิสูจน์แล้วว่ามีประโยชน์กับฉันฉันจึงค่อยๆปรับปรุงมันอย่างมาก หลายก้าวเล็ก ๆ นั้นมีพลังมากกว่าความพยายามเพียงครั้งเดียว!
Ingo Karkat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.