ฉันสับสนเล็กน้อยว่าทำไมคำสั่งขีดล่าง_
ซึ่งกระโดดไปที่จุดเริ่มต้นของบรรทัด (COUNT - 1) th ด้านล่างเคอร์เซอร์ได้รับรหัสของตัวเอง เมื่อผมจะใช้มากกว่านี้+
หรือ^
?
ฉันสับสนเล็กน้อยว่าทำไมคำสั่งขีดล่าง_
ซึ่งกระโดดไปที่จุดเริ่มต้นของบรรทัด (COUNT - 1) th ด้านล่างเคอร์เซอร์ได้รับรหัสของตัวเอง เมื่อผมจะใช้มากกว่านี้+
หรือ^
?
คำตอบ:
คำถามที่ดี!
การเคลื่อนไหวด้วยตัวเองคุณพูด_
ถูกไม่ใช่กุญแจที่มีประโยชน์โดยเฉพาะ:h _
*_*
_ <underscore> [count] - 1 lines downward, on the first non-blank
character |linewise|.
คำสำคัญที่นี่คือ "linewise" ดังนั้นถ้าเป้าหมายของคุณเป็นเพียงการเลื่อนเคอร์เซอร์ไปแล้ว^
, j
และทั้งหมดได้งานทำและมีไม่มากที่จะจุด+
_
แต่เป็นอาร์กิวเมนต์ดำเนินการให้_
มีประสิทธิภาพสุด
_
จำนวนมากของทางลัดคู่สำคัญเป็นทางลัดจริงเพียงเพื่อ ตัวอย่างเช่น,
dd -> d_
cc -> c_
yy -> y_
Y -> y_
ฯลฯ เนื่องจากเป็นการเคลื่อนไหวแบบ linewise โดยทั่วไปจะเลือกทั้งบรรทัดเพื่อดำเนินการโดยไม่คำนึงถึงตำแหน่งที่เคอร์เซอร์ของคุณเริ่มต้นในขณะที่^
เพิ่งเปลี่ยนจากตัวละครของคุณไปเป็นแบบแรกที่ไม่ว่างเปล่า
มันช่วยฉันได้เมื่อคิดเกี่ยวกับการเคลื่อนไหว linewise vs blockwise เพื่อจินตนาการว่าฉันกำลังกดอย่างใดอย่างหนึ่งv
หรือV
ขวาก่อนการเคลื่อนไหว ดังนั้นผมคิดว่าd^
จะเป็นเทียบเท่ากับv^d
และฉันคิดd_
ที่จะเทียบเท่าหรือV_d
V^d
แน่นอนคุณยังสามารถแทนที่การเคลื่อนไหวเพื่อบังคับให้ linewise หรือ characterwise ดังนั้นdv_
จริงๆแล้วเหมือนกันกับd^
หรือv^d
และdVw
เหมือนVwd
ที่เหมือนd_
กันทุกประการ
สาเหตุที่เป็นพิเศษคือ "count-1th" บรรทัดนั้นเพื่อให้1dd
(ซึ่งจริงๆแล้วd1_
) ลบหนึ่งบรรทัดทั้งหมด2dd
(ซึ่งจริงๆแล้วd2_
) ลบ 2 บรรทัดทั้งหมด3dd
ลบ 3 บรรทัดทั้งหมด ฯลฯ
dd
อาจจะสะดวกสบายกว่าd_
แต่เพราะเป็นเพียงการทำแผนที่ไปยังdd
d_
และยังมีประโยชน์ใน vimscript
gUU
อะไร ฉันคิดว่ามันจะคุ้มค่าที่จะหาตัวอย่างจริงที่<operator>_
จะใช้
dd
จะง่ายกว่าd_
และง่ายกว่า3yj
4y_