ทำไม 'cw' และ `ce` ทำสิ่งเดียวกัน?


15

สิ่งนี้ทำให้ฉันเกี่ยวกับคำสั่งwและWการเคลื่อนไหวเสมอ - พวกเขาดูเหมือนจะทำงานแตกต่างกันเมื่อใช้กับcคำสั่ง hange มากกว่าที่พวกเขาทำเมื่อใช้คนเดียวหรือกับdคำสั่ง elete


ตัวอย่างเช่นด้วยเคอร์เซอร์ที่ "q" ของข้อความนี้:

The quick brown fox jumps over the lazy dog.

พิมพ์dwผลลัพธ์ใน

The brown fox jumps over the lazy dog.

และพิมพ์deผลลัพธ์ใน

The  brown fox jumps over the lazy dog.

(สังเกตช่องว่างสองช่องระหว่าง "The" และ "brown")


yank คำสั่งยังถือว่าwและeแตกต่างที่สามารถแสดงให้เห็นโดยการเปรียบเทียบyeP:

The quickquick brown fox jumps over the lazy dog.

และywP:

The quick quick brown fox jumps over the lazy dog.

อย่างไรก็ตามการพิมพ์อย่างใดอย่างหนึ่งceslow<Esc>หรือcwslow<Esc>ผลลัพธ์ในสิ่งเดียวกัน :

The slow brown fox jumps over the lazy dog.

เอกสารนี้อยู่ที่ไหนสักแห่ง? ตรรกะเบื้องหลังคืออะไรและฉันจะทำนายผลลัพธ์ของคำสั่งที่ใช้ได้wอย่างไร

คำตอบ:


18

มันเป็นกรณีพิเศษ ตรวจสอบเอกสารสำหรับ WORDภายใต้ "กรณีพิเศษ":

กรณีพิเศษ: "cw" และ "cW" ถือว่าเป็น "ce" และ "cE" หากเคอร์เซอร์อยู่บนที่ไม่ว่างเปล่า นี่เป็นเพราะ "cw" ถูกตีความว่าเป็นการเปลี่ยนแปลงคำและคำที่ไม่รวมถึงพื้นที่สีขาวต่อไปนี้ {Vi: "cw" เมื่อว่างเปล่าตามด้วยช่องว่างอื่นจะเปลี่ยนเฉพาะช่องว่างแรก นี่อาจเป็นข้อผิดพลาดเพราะ "dw" ลบช่องว่างทั้งหมด}

อีกกรณีพิเศษ: เมื่อใช้การเคลื่อนไหว "w" ร่วมกับโอเปอเรเตอร์และคำสุดท้ายที่ย้ายมาอยู่ที่ท้ายบรรทัดการสิ้นสุดของคำนั้นจะกลายเป็นจุดสิ้นสุดของข้อความที่ดำเนินการไม่ใช่คำแรกในถัดไป ไลน์.

การใช้ Vi ดั้งเดิมของ "e" นั้นเป็นบั๊ก ตัวอย่างเช่นคำสั่ง "e" จะหยุดบนอักขระตัวแรกของบรรทัดหากบรรทัดก่อนหน้าว่างเปล่า แต่เมื่อคุณใช้ "2e" สิ่งนี้จะไม่เกิดขึ้น ในกลุ่ม "ee" และ "2e" เหมือนกันซึ่งมีเหตุผลมากกว่า อย่างไรก็ตามสิ่งนี้ทำให้เกิดความไม่ลงรอยกันระหว่าง Vi และ Vim เล็กน้อย


1
Neovim 0.2.1 เพิ่ม 'cpoptions' flag "_" (ขีดล่าง) ซึ่งสลับการทำงานนี้ neovim.io/doc/user/options.html#'cpoptions '
Justin M. Keyes

6

ความแตกต่างระหว่างพฤติกรรมของการเคลื่อนไหวในcwกับdwสามารถอธิบายได้ง่าย: ปกติถ้าคุณต้องการเปลี่ยนคำที่คุณจะออกจากช่องว่างที่ติดตามมันในขณะที่การลบคำแนะนำคุณต้องการลบช่องว่าง

หากคุณไม่ต้องการช่องว่างที่จะไปออกไปด้วยเหตุผลบางอย่าง (ผมทำอย่างสม่ำเสมอเพียงพอ แต่ไม่สามารถคิดตัวอย่าง) จากนั้นใช้การเคลื่อนไหว:awcaw

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