ดำเนินการบางอย่างโดยไม่ต้องล้างการลงทะเบียน


30

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

มีวิธีการทำเช่นนี้โดยไม่ต้องเข้าสู่โหมดแทรกหรือไม่?


Jasper พบคำถามที่คล้ายกันในStack Overflow : [มีวิธีใดบ้างที่จะลบในกลุ่มโดยไม่เขียนทับหน้าสุดท้ายของคุณ? [ซ้ำ]] ( stackoverflow.com/questions/3638542/… ) และมีวิธีการลบโดยไม่ต้องใส่ข้อความในการลงทะเบียน?
Gilles 'หยุดความชั่วร้าย' ใน

คำตอบ:


35

ตัวเลือกของคุณคือ:

  1. _ใช้การลงทะเบียนของหลุมดำ "_ddตัวอย่างเช่นในการลบโฆษณาที่คุณจะพิมพ์ การลบนี้จะไม่มีผลกับคลิปบอร์ด
  2. ระบุชื่อการลงทะเบียนสำหรับ yank ดั้งเดิมอย่างชัดเจน ตัวอย่างเช่นเมื่อต้องการดึงบรรทัดลงในการลงทะเบียนที่มีชื่อคุณจะต้องพิมพ์"ayyแล้ววางเพื่อพิมพ์"ap
  3. ใช้รีจิสเตอร์ yank เพื่อดึง yank ดั้งเดิมแทน คุณสามารถดึงแล้วลบได้ตามต้องการจากนั้นเมื่อคุณไปที่ประเภทการวาง"0p
  4. ใช้ปลั๊กอินเช่นvim-easyclipเพื่อมอบตัวดำเนินการตัดที่แตกต่างจากตัวดำเนินการลบ (การเปิดเผยแบบเต็ม: ฉันเขียนไว้)

เรียกใช้:help registersเพื่อดูรายละเอียดเพิ่มเติมใน 3 ครั้งแรก


4
ดังนั้นxฉันจะใช้"_xแล้ว
durron597

1
ถูกต้อง.
Steve Vermeulen

2
@ durron597 หากคุณลบอักขระหนึ่งตัวพร้อมxกันคุณควรเรียนรู้ที่จะลบการเคลื่อนไหวแบบdt)ที่จะถูกลบจนกระทั่งเครื่องหมายวงเล็บปิดถัดไปd2Wซึ่งลบสองช่องว่างคั่นโทเค็นถัดไป จากนั้นคุณอาจทำอะไรบางอย่าง"_di{ในภูมิภาคที่มีค้ำยันซึ่งเป็นสิ่งที่ฉันทำตลอดเวลา ในโหมดปกติที่นี้หมายถึง " ลบทุกอย่างภายในนี้ยันภูมิภาคเข้าไปในหลุมดำ "
OregonTrail

เพิ่มnnoremap x "_xไปยังของฉัน~/.vimrc(คำอธิบายที่นี่: stackoverflow.com/questions/54255/… )
Victoria Stuart

11

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

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

สุดท้ายเป็นสตีฟ Vermeulen "_ชี้ให้คุณสามารถบอกได้เป็นกลุ่มที่จะไม่บันทึกข้อความที่ถูกลบโดยระบุการลงทะเบียนของหลุมดำ

:help registersความช่วยเหลือที่เกี่ยวข้องคำสั่ง


3

:letคำสั่งจะช่วยให้คุณ redefine ลงทะเบียนชื่อ ในบรรทัดคำสั่งของ vim กดControl+ R สองครั้ง1จากนั้นชื่อ register จะวางเนื้อหาของ register ลงในคำสั่ง จากนั้นคุณสามารถแก้ไขสิ่งที่วางแล้วบันทึกการลงทะเบียนด้วยการแก้ไขของคุณ

ตัวอย่าง:

  • ในโหมดปกติบนบรรทัดที่มีข้อความ "Foo Bar" ให้พิมพ์"fyyทั้งบรรทัด ( yy) ลงในfregister ( "f)
  • พิมพ์:let @f='และControl+ r, Control+ rอีกครั้งจากนั้นfคุณควรเห็นมันวางใน "Foo Bar" ดังนั้นตอนนี้บรรทัดคำสั่งของคุณจะอ่าน:let @f='Foo Barโดยมีเคอร์เซอร์อยู่ท้ายสุด
  • :let @f='foo bar bazตอนนี้คุณสามารถใช้ลูกศรและปุ่มลบเพื่อแก้ไขสิ่งที่คุณได้วางเพียงในเช่น
  • เสร็จสิ้นปิด quoting: และตี:let @f='foo bar baz'Enter

ตอนนี้คุณได้กำหนดเนื้อหาของการfลงทะเบียนใหม่ให้เป็น "foo bar baz"

(ใช้ได้กับมาโคร:help letสำหรับข้อมูลเพิ่มเติม)


1 Control + rช่วยให้คุณแทรกการลงทะเบียนเมื่อคุณอยู่ในโหมดแทรกราวกับว่าคุณกำลังพิมพ์อักขระ การใช้ลำดับนี้สองครั้งมีความสำคัญเนื่องจาก "ข้อความถูกแทรกอย่างแท้จริงไม่เหมือนกับพิมพ์สิ่งนี้จะแตกต่างกันเมื่อการลงทะเบียนมีอักขระเช่น<BS>" - ส่วนแทรก. txt vimdoc:help i_CTRL-R_CTRL-R


0

เกี่ยวข้องกับการลงทะเบียน blackhole ที่"_กล่าวถึงโดย @derobert คุณสามารถค้นหา screencast ที่มีประโยชน์ได้ในhttp://vimcasts.org/episodes/meet-the-yank-register/

Vim ใช้คำศัพท์ delete, yank และ put แทนที่คำศัพท์มาตรฐานที่มากกว่าการตัดคัดลอกและวาง เริ่มต้นด้วยตัวอักษรเดียวกันการวางและวางสามารถเปลี่ยนได้อย่างง่ายดาย เมื่อคุณคุ้นเคยกับคำว่างัดมันจะกลายเป็นตรงกันกับการคัดลอก แต่การใช้คำว่า 'ลบ' ของ Vim นั้นเป็นปัญหาในบริบทส่วนใหญ่คำที่ลบนั้นหมายถึงการลบออก แต่การดำเนินการลบของ Vim จะคัดลอกข้อความไปยังรีจิสเตอร์จากนั้นลบออกจากเอกสาร กล่าวอีกนัยหนึ่งการดำเนินการลบของ Vim จะทำงานเหมือนถูกตัด


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

ฉันพยายามแสดงความคิดเห็นในโพสต์ต้นฉบับ แต่ฉันทำไม่ได้ ทางเลือกเดียวที่ฉันมีคือคนที่ฉันเลือก @jamessan
Marlon León

0

ปลั๊กอิน ReplaceWithRegister

http://www.vim.org/scripts/script.php?script_id=2703 (2009-2014)

grมันแสดงให้เห็นการทำแผนที่

  1. งัด
  2. เลือกข้อความที่คุณต้องการแทนที่และกด gr
  3. ย้ายไปยังบล็อกถัดไปที่คุณต้องการแทนที่

หรือใช้gr<text object>เพื่อทำโดยไม่ต้องเลือกภาพ รองรับการทำซ้ำจุดเมื่อติดตั้งปลั๊กอินrepeat.vimโดย Tim Pope และvisualrepeat.vimโดย Ingo Karkat

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