ทำไม“ โอเปอเรเตอร์” +“ โมชั่น” จึงทำงานไม่สอดคล้องกัน?


17

นี่คือสิ่งที่ทำให้ฉันรำคาญใจมานาน แต่ฉันไม่เคยถาม สมมติว่าข้อความในบัฟเฟอร์ของคุณมีลักษณะดังนี้:

Hello
World

ถ้าฉันวางเคอร์เซอร์ไว้ที่ใดที่หนึ่งในบรรทัด 2 และทำykเคอร์เซอร์ของฉันจะสิ้นสุดที่บรรทัดที่ 1 นี่ดูเหมือนจะบอกเป็นนัยถึงโอเปอเรเตอร์และการเคลื่อนไหวก็เลื่อนเคอร์เซอร์ด้วย อย่างไรก็ตามถ้าฉันเริ่มต้นในบรรทัดที่ 1 และทำyjเคอร์เซอร์ของฉันจะยังคงอยู่ในจุดเดียวกัน ความไม่ลงรอยกันแบบเดียวกันเกิดขึ้นกับกุญแจจำนวนมาก

Moves   Doesn't move
gg      G
h       l
{       }
(       )
T       t
F       f
?       /

แล้วพฤติกรรมนี้เป็นอย่างไร สิ่งนี้คาดหวังและบันทึกไว้เป็นอย่างดีหรือไม่? มีชื่อนี้ไหม สามารถแทนที่ได้หรือไม่

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


2
yเป็นตัวดำเนินการไม่ใช่คำสั่ง
romainl

คำตอบ:


16

จาก :h operator

หลังจากใช้โอเปอเรเตอร์เคอร์เซอร์จะถูกทิ้งไว้ที่จุดเริ่มต้นของข้อความที่ดำเนินการ ตัวอย่างเช่น "yfe" ไม่ได้ย้ายเคอร์เซอร์ แต่ "yFe" จะย้ายเคอร์เซอร์ไปทางซ้ายไปยัง "e" เมื่อ yank เริ่มต้น

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

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