หลังจากคัดลอกส่วนที่เลือกไปยังแป้นพิมพ์กลับไปที่ตำแหน่งเดิม


18

เคอร์เซอร์ของฉันอยู่ตรงกลางของย่อหน้าเมื่อฉันตัดสินใจกะทันหันฉันต้องคัดลอกย่อหน้านั้น:

เริ่มต้น

ดังนั้นฉันพิมพ์vipเพื่อเลือกย่อหน้าที่มองเห็นได้:

เลือก

ตอนนี้ฉันกดcmd+Cเพื่อคัดลอกไปยังคลิปบอร์ด (อาจแตกต่างกันไปในระบบของคุณ แต่ไม่ควรเกี่ยวข้องกับคำถามกลางของโพสต์ของฉัน) ซึ่งทำให้เคอร์เซอร์ของฉันอยู่ที่จุดเริ่มต้นของย่อหน้า:

สุดท้าย

มากกว่าตำแหน่งที่ต้องการซึ่งเป็นตอนที่ฉันเริ่ม

หมายเหตุ: yipปัญหาเดียวกันเกิดขึ้นเมื่อลากเลือกไม่ใช่สายตาด้วย

ฉันต้องการพฤติกรรมเริ่มต้นที่จะ "กลับสู่ตำแหน่งเคอร์เซอร์เดิม" หลังจากทำการเลือก / คัดลอกการกระทำเช่นนี้ มีการกำหนดค่าที่ทำให้สิ่งนี้เป็นไปได้หรือไม่?


11
ใช่ฉันพบว่ามันน่ารำคาญเช่นกัน ฉันเพียงแค่มีแนวโน้มที่จะใช้เครื่องหมายเพื่อวัตถุประสงค์ที่: mm "+yap `m(หมายเหตุว่า"+yYanks ไปยังคลิปบอร์ดระบบของคุณ)
fruglemonkey

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

คำตอบ:


14

ทางออกที่เป็นไปได้คือการใช้การกระโดด:

ก่อนที่จะทำการลากหรือเลือกภาพคุณสามารถตั้งค่าการกระโดดใหม่ซึ่งคุณจะสามารถเข้าถึงได้หลังจากที่เคอร์เซอร์เคลื่อนที่ m`จะทำอย่างไรเพื่อให้การใช้งาน

จากนั้นหลังจากเคอร์เซอร์ของคุณถูกย้ายเนื่องจากการใช้ yanking ctrloเพื่อย้อนกลับไปในรายการข้าม นอกจากนี้คุณสามารถดูรายการของการกระโดดที่มี:jumpsและนำทางรายการนี้ด้วยctrloและctrli

เพื่อสรุปเวิร์กโฟลว์ของคุณจะเป็น:

  • m`
  • yip
  • ctrlo

การใช้m` ชุดเครื่องหมายคุณสามารถข้ามไปด้วยแทน``ctrlo

คุณสามารถอ่าน:h mark-motionsและ:h :jumpsสำหรับข้อมูลเพิ่มเติม


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

1
@ โจนาห์ฉันแผนที่<leader>'จะเป็น`ซึ่งทำงานได้ค่อนข้างดีสำหรับฉัน (ฉันใช้<space>เป็นผู้นำของฉัน)
Numeri พูดว่า Reinstate Monica

@Jonah: ในฐานะที่เป็น Numeri กล่าวว่าการทำแผนที่อาจเป็นทางออกที่ดีมิฉะนั้นถ้าคุณต้องการกำจัด backtick คุณสามารถดู:h 'langmap'ได้ ฉันไม่ได้บอกว่ามันเป็นทางออกที่ดี แต่บางทีมันอาจจะน่าสนใจสำหรับคุณ
statox

@Johah ฉันจริง ๆ แล้วสลับเครื่องหมายคำพูดเดี่ยวและเครื่องหมายขีดหลังโดยใช้noremap ' ` noremap ` '... นี่คือ vimrc ของฉันและใช้งานได้ดี
Niko Bellic

10

คุณสามารถหลีกเลี่ยงการเลื่อนเคอร์เซอร์ด้วย:

:'{,'}y

ดู:help range, และ:help mark-motions:help :y


1
ยินดีที่ได้ทราบ แต่นั่นคือสิ่งที่คุณทำจริง ๆ ? ดูเหมือนว่าการกดคีย์ 8 ครั้งพร้อมด้วยวงเล็บสองอันทำให้มันยากกว่าวิธีแก้ปัญหามาร์ค
Jonah

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

2
@Jonah คุณยังมีตัวเลือกในการสร้างการแมป สิ่งที่ชอบ:nmap <key> :'{,'}y<CR>ควรทำงาน
statox

10

เคอร์เซอร์ของฉันอยู่ตรงกลางของย่อหน้า

หากคุณเพิ่งแก้ไขมันทางออกที่ง่ายที่สุดคือการพิมพ์g ;ซึ่งจะวางตำแหน่งเคอร์เซอร์ของคุณในตำแหน่งแก้ไขล่าสุด

และถ้าคุณยังไม่ได้แก้ไขย่อหน้าคุณสามารถทำการดำเนินการแทนที่แบบง่ายโดยใช้อักขระเดียวกับที่คุณใช้ (เช่นhคุณพิมพ์rh) เพื่อเรียกใช้การแก้ไข "เหตุการณ์" โดยไม่ต้องแก้ไขอะไรเลย


2
1: ฉันมักจะใช้'.แต่มันจะมีประโยชน์มากที่จะนำทางระหว่างการเปลี่ยนแปลงที่ผ่านมาด้วยและg; g,
mMontu

2
มีรุ่นg;ไหนที่จะพาคุณไปยังตำแหน่งคอลัมน์ที่ถูกต้องเช่นกัน?
โยนาห์

@ Jonah นั่นเป็นพฤติกรรมตามค่าเริ่มต้น มันไม่ทำงานสำหรับคุณ มันพาฉันไปยังคอลัมน์และตำแหน่งบรรทัดที่ถูกต้องเสมอ
อัลจี

4

ปลั๊กอินเป็นกลุ่ม-easyclipมีการตั้งค่าสำหรับการนี้:

g:EasyClipPreserveCursorPositionAfterYank- ค่าเริ่มต้น 0 (เช่นปิดใช้งาน) พฤติกรรมเริ่มต้นของ Vim คือการวางเคอร์เซอร์ที่ตำแหน่งเริ่มต้นของข้อความที่ถูกดึงซึ่งสอดคล้องกับการเคลื่อนไหวอื่น ๆ อย่างไรก็ตามหากคุณต้องการตำแหน่งเคอร์เซอร์จะไม่เปลี่ยนแปลงเมื่อทำการ yanks ให้เปิดใช้งานตัวเลือกนี้

เป็นเรื่องเล็กน้อยสำหรับฉันที่จะติดตั้งปลั๊กอินทั้งหมดสำหรับคุณสมบัติเล็ก ๆ นี้ดังนั้นฉันชอบใช้เครื่องหมายตามความคิดเห็นของฉัน


0

การขยายคำตอบของ Al.G. เราสามารถไปยังตำแหน่งที่ต้องการโดยไม่ต้องแก้ไข giการแก้ปัญหาคือ เราจะไปถึงตำแหน่งเดียวกันกับที่เราเคยอยู่ในโหมดแทรกครั้งสุดท้ายมาก่อน

  • คุณอยู่ตรงกลางของย่อหน้า
  • เปลี่ยนเป็นโหมดแทรก
  • เปลี่ยนเป็นโหมดปกติ
  • vipกด
  • giกด
  • เปลี่ยนเป็นโหมดปกติ ( giจะปล่อยให้เราใส่โหมด)

ถ้าเราต้องการที่จะไปที่จุดเริ่มต้นหรือจุดสิ้นสุดของข้อความที่เน้น

 :help v_o 

เมื่อคุณดึงข้อความที่ไฮไลต์คุณจะกลับสู่โหมดปกติและคุณอาจหรือไม่อาจคงตำแหน่งเคอร์เซอร์เดิมไว้

  1. หากคุณเริ่มเน้นจากตำแหน่งเคอร์เซอร์ที่สูงขึ้นไปถึงต่ำลง (จากหมายเลขคอลัมน์คอลัมน์บรรทัดล่างถึงหมายเลขคอลัมน์คอลัมน์บรรทัดสูงกว่า) คุณจะยังคงตำแหน่งเคอร์เซอร์เดิมเมื่อกด y
  2. เคอร์เซอร์จะยังคงอยู่ในตำแหน่งปัจจุบันหากไฮไลต์เริ่มจากตำแหน่งเคอร์เซอร์ล่างถึงสูง

การกลับไปที่ตำแหน่งเดิมหลังจาก yanking:
gvเพื่อรับไฮไลต์ก่อนหน้า

ตอนนี้คุณสามารถสลับระหว่างตำแหน่งเดิมและปัจจุบันในโหมดภาพที่มีคีย์หรือ
oO

หมายเลขบรรทัดและคอลัมน์ของบรรทัดสถานะจะช่วยให้ทราบตำแหน่งเคอร์เซอร์ที่แน่นอน
เอกสารอ้างอิง:

:help visual-change

สิ่งนี้จะไม่ทำงานvipเมื่อเคอร์เซอร์เริ่มตรงกลางย่อหน้า
แอนโทนี

โอ้ฉันไม่ได้สังเกตเห็นตอนนี้ฉันจะแก้ไขคำตอบของฉันมากกว่าที่จะลบมัน
vusan

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