vim: ฉันสามารถทำ * only * y ให้ทำสำเนาได้หรือไม่


11

ฉันเรียนรู้ที่จะชอบเป็นกลุ่ม แต่สิ่งหนึ่งที่ฉันยังไม่ได้รับอย่างเต็มที่คือสถานการณ์การคัดลอกและการวาง ในโปรแกรมแก้ไขข้อความมักเกิ้ลฉันจะCtrl- Cคัดลอกข้อความแล้วแก้ไข / ลบแล้ววางข้อความที่อื่น อย่างไรก็ตามในที่เป็นกลุ่มฉันไม่สามารถทำเช่นนี้ได้เพราะหลังจากที่ฉันคัดลอกข้อความด้วยyการแก้ไขข้อความมักเกี่ยวข้องdและxทำให้ข้อความต้นฉบับของฉันหายไป

มีวิธีการทำdและxไม่คัดลอกข้อความหรือไม่ มิฉะนั้นฉันจะใช้คุณสมบัติ vim เหล่านี้ได้อย่างไร?

คำตอบ:


16

9 Yanks ก่อนหน้านี้จะถูกบันทึกไว้ในทะเบียนเรียกว่าผ่าน1 9คุณสามารถเรียก yank ถัดไปล่าสุดด้วย"1pอันก่อนหน้าด้วย"2pและอื่น ๆ คำสั่ง:regแสดงการลงทะเบียนที่มีอยู่สำหรับการวาง

หากคุณต้องการที่จะงัดนานใช้ทะเบียนตัวอักษร

สำหรับคำสั่งที่เกี่ยวข้องกับ yank ที่คลุมเครือมากขึ้นให้เริ่มอ่าน:help "ในคู่มือ


2
นอกจากนี้ register 0 ยังมีข้อความสุดท้ายที่ถูกดึง (ซึ่งต่างกับการลบ) ดังนั้นเมื่ออ้างอิงกลับไปที่คำถามเดิมคุณสามารถดึงเอาyไปแก้ไขต่อรวมถึงdและxและวางข้อความที่ดึงลงด้วย"0p
Nefrubyr

@Nefrubyr ความคิดเห็นของคุณด้านบนเป็นคำตอบที่ง่ายที่สุด แต่ก็ไม่ได้กล่าวถึงในสามคำตอบที่มีอยู่ บางทีคุณควรจะเพิ่มมัน? (ฉันอาจจะถ้าคุณทำไม่ได้)
ไวด์การ์ด

9

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

เมื่อคุณต้องการที่จะทำอะไรสักอย่างนานกว่าสองสามวินาทีในขณะที่คุณไปทำสิ่งอื่นคุณควรใช้ชื่อรีจิสเตอร์

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

(เพื่อให้ทำงานได้ดีจริง ๆ คุณควรมีบรรทัดเหมือนset viminfo='50,\"1000ใน~/.vimrcไฟล์ของคุณเพื่อบอกให้จำสิ่งต่าง ๆ เช่นการลงทะเบียนเนื้อหาในเซสชัน Vim จากนั้นคุณสามารถไปเที่ยวพักผ่อนระหว่างงัดแงะ!)

มีทะเบียนชื่อ 26 ชื่อ (az) หากคุณให้พวกเขาเป็นตัวพิมพ์ใหญ่แทนดังที่แสดงไว้ด้านบนคุณจะผนวกเนื้อหาลงทะเบียนปัจจุบันแทนการแทนที่พวกเขา ดังนั้นคุณสามารถสร้างบางสิ่งที่ซับซ้อนขึ้นมาพูดลงทะเบียนhทีละชิ้นแล้วลงมือทั้งหมดพร้อม" h pกัน

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

นอกจากนี้ยังได้รับแก้ว Vi


1

หากคุณต้องการลบข้อความด้วย d โดยไม่ต้องแก้ไขการลงทะเบียน yank ของคุณ (กล่าวว่าคุณได้ดึงข้อความที่คุณยังไม่พร้อมที่จะวางก่อนที่จะลบข้อความอื่น ๆ เช่นคุณสามารถใช้register หลุมดำ _ได้

หากคุณทำ"_ddเช่นนั้นบรรทัดปัจจุบันจะถูกลบและถูกลืมทันที

จริงๆแล้วฉันไม่ได้ใช้ทะเบียนนี้บ่อยนัก การกดแป้นน้อยกว่าการบันทึกลงทะเบียนทั่วไป (ลงทะเบียนจดหมายใด ๆ ) และถ้าคุณบันทึกลงทะเบียนทั่วไปอย่างน้อยเส้นที่คุณลบจะยังคงใช้ได้จนกว่าคุณจะเขียนทับการลงทะเบียนหาก ความต้องการเกิดขึ้น

หากคุณมีแนวโน้มที่จะลืมที่จะใช้ลงทะเบียนอีกเมื่อลบคุณสามารถกำหนดแมโครเสื้อคลุมสำหรับตัวอย่างเช่นนี้dd:noremap dd "add


0

ดังที่ได้กล่าวไว้ในความคิดเห็นต่อคำตอบที่ยอมรับ (ปัจจุบัน) วิธีที่ยอมรับได้คือการใช้ register zero ( "0) ศูนย์การลงทะเบียนมักจะมีการดึงเอาไว้ล่าสุดและจะไม่ถูกเขียนทับโดยdและxดังนั้น"0pจะทำให้สิ่งที่คุณถูกดึงโดยไม่คำนึงถึงสิ่งที่ถูกแก้ไขในระหว่างนี้

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