ฉันสามารถทำให้เป็นกลุ่มเปลี่ยนพฤติกรรมเคอร์เซอร์ได้หรือไม่


11

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

สำหรับตัวอย่างหนึ่งสาเหตุที่เป็นปัญหาหากฉันต้องการลบคำสุดท้ายในบรรทัดฉันกด$เพื่อไปยังจุดสิ้นสุดของบรรทัดแล้วจึงdbลบไปข้างหลัง การทำเช่นนี้จะทำให้ตัวอักษรถูกลบเนื่องจาก$ไม่ได้ไปที่จุดสิ้นสุดของบรรทัดจริงๆไปถึงอักขระตัวสุดท้ายของบรรทัดและdbลบเฉพาะสิ่งที่อยู่ตรงหน้าอักขระปัจจุบันเท่านั้น ปัญหาไม่ใช่ว่าฉันจะต้องพิมพ์ตัวละครพิเศษมันเป็นความคิดพิเศษที่เกี่ยวข้องกับการทำสิ่งที่ควรจะง่ายซึ่งเบี่ยงเบนความสนใจของฉันออกไปจากสิ่งที่ฉันพยายามทำให้สำเร็จ

สำหรับฉันแล้วดูเหมือนว่าการวางเคอร์เซอร์ความคิดที่ทันสมัยมากขึ้นนั้นเหนือกว่าทุกอย่างและฉันต้องการเปลี่ยนvimไปใช้วิธีการนั้น ฉันแน่ใจว่าvimแฟนฮาร์ดคอร์บางคนจะไม่เห็นด้วยกับมุมมองของฉัน แต่เนื่องจากข้อโต้แย้งมาตรฐานประการหนึ่งสำหรับvimความเหนือกว่าของมันก็คือการกำหนดค่าที่ไม่สิ้นสุด:

  • มันสามารถส่งมอบในกรณีนี้?
  • สามารถvimวางเคอร์เซอร์ระหว่างตัวละครได้หรือไม่?

2
ดูเหมือนว่าคุณกำลังมองหาInsertโหมดหรือขาดจุดของnormalโหมด ฉันจะทำ$dawหรือ$bdwลบคำสุดท้ายในบรรทัดในโหมดปกติ ในโหมดที่ผมจะทำInsert A<Ctrl-w>
jw013

3
สำหรับเร็กคอร์ดในฐานะที่เป็นคนที่กลัวความคิดของ "ตัวละคร" ระหว่างตัวละครลำดับสำคัญที่ถูกต้องเพื่อลบคำสุดท้ายในบรรทัดปัจจุบันคือ$bD
Alan Curry

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

2
จากความเห็นจนถึงตอนนี้ดูเหมือนว่าคำตอบสำหรับคำถามคือ "ไม่การเคลื่อนที่ของเคอร์เซอร์รุ่นนี้ฝังอยู่ในการออกแบบของ vim และไม่สามารถเปลี่ยนแปลงได้" ถูกต้องหรือไม่
iconoclast

2
@iconoclast นั่นเป็นข้อสรุปของฉันด้วย เท่าที่ฉันสามารถบอกได้มันเป็นไปไม่ได้ใน vi หรือเสียงเรียกเข้าที่จะปฏิบัติต่อตัวละครทั้งหมดในบรรทัดที่เหมือนกันเสมอมีข้อยกเว้นสำหรับอักขระตัวแรกหรือตัวสุดท้ายเสมอ
Gilles 'หยุดความชั่วร้าย' ใน

คำตอบ:


5

คุณสามารถ:set virtualedit+=onemoreที่จะให้คุณผ่านตัวละครตัวสุดท้าย น่าเสียดายสำหรับคุณ$ยังไปที่ตัวละครตัวสุดท้าย; คุณต้องเลื่อนเคอร์เซอร์ไปเพื่อให้ผ่านไปได้ ในทางกลับกันคุณสามารถใช้g$ซึ่งโดยปกติแล้วจะไปที่อักขระตัวสุดท้ายของบรรทัดหน้าจอในบรรทัดที่ล้อมรอบ ในonemoreโหมดมันจะผ่านอักขระตัวสุดท้ายของเส้นที่ไม่พันกัน (หรือบรรทัดหน้าจอสุดท้ายของบรรทัดที่ล้อมรอบ)

:h 'virtualedit' บอกว่าตัวเลือกนี้อาจทำให้สคริปต์ยุ่งเหยิง แต่ฉันไม่รู้ว่าความเสี่ยงที่เกิดขึ้นในความเป็นจริงนั้นใหญ่เพียงใด

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