เมื่อฉันต้องพิมพ์ข้อความจำนวนมากฉันมักจะกดนิ้วของฉันshiftเมื่อฉันเขียนตัวอักษรตัวแรกของประโยคที่มักจะให้:
[...]end of sentence. NEw sentence[...]
ที่นี่EของNEwที่ควรจะเป็นกรณีที่ต่ำกว่า ฉันพยายามสร้างฟังก์ชั่นที่จะตรวจสอบว่าตัวอักษรตัวที่สองของคำแรกของประโยคที่ฉันพิมพ์เป็นตัวพิมพ์ใหญ่และตัวพิมพ์เล็กหรือไม่ ส่วนที่สำคัญคือการแก้ไขควรทำโดยอัตโนมัติในขณะที่ฉันพิมพ์ตอนท้ายของประโยค
จนถึงตอนนี้ฉันได้ลองเล่นกับเหตุการณ์บันทึกอัตโนมัติInsertCharPreก่อนที่จะทราบว่าข้อความไม่สามารถแก้ไขได้โดยฟังก์ชันที่ทริกเกอร์โดยเหตุการณ์นี้
อะไรจะเป็นทางออกที่ดี?
หมายเหตุจนถึงตอนนี้ฉันไม่จำเป็นต้องมุ่งเน้นไปที่ตัวกล่องขอบเช่นตัวย่อซึ่งควรเป็นตัวพิมพ์ใหญ่หรือของแบบนี้
แก้ไขฉันทำสิ่งนี้ซึ่งเป็นวิธีแก้ปัญหาที่ไม่สมบูรณ์:
autocmd CursorMovedI * call RemoveUnwantedUpper()
function! RemoveUnwantedUpper()
    " Get the current sentence
    " Based on http://stackoverflow.com/a/23315227/4194289
    let l:save_clipboard = &clipboard
    set clipboard= " Avoid clobbering the selection and clipboard registers.
    let l:save_reg = getreg('"')
    let l:save_regmode = getregtype('"')
    normal! y(
    normal! ``
    let l:sentence =getreg('"') 
    call setreg('"', l:save_reg, l:save_regmode)
    let &clipboard = l:save_clipboard
    " Check that we entered a new word (space inserted)
    if l:sentence[len(l:sentence)-1] != " "
       return
    endif 
    " Check if the word is the first one of the sentence
    let l:size = len(split(l:sentence, " "))
    if l:size > 1 
        return
    endif
    " If the last char entered is a space (new word) remove the unwanted Upper case
   normal! bl
   normal! vu
   normal! ``
endfunction
มันมีปัญหาเนื่องจากตัวละครตัวแรกที่ฉันใส่ในโหมดแทรกถูกย้ายไปยังจุดสิ้นสุดของบรรทัด แต่ฉันคิดว่าสามารถแก้ไขได้
ฉันเดาว่าตอนนี้คำถามของฉันกลายเป็นคำถามทบทวนรหัส :
- ฉันจะกำจัดผลข้างเคียงซึ่งย้ายอักขระตัวแรกที่แทรกเข้าไปได้อย่างไร
- เป็นวิธีที่ดีที่สุดหรือไม่
- วิธีนี้ดูเหมือนจะทำให้ Vim ทำงานช้าลง: จะปรับปรุงได้อย่างไร?
<Space>ดูน่าสนใจทีเดียวเนื่องจากลดจำนวนการเรียกใช้ฟังก์ชัน ฉันจะพยายามทำงานด้วยวิธีนี้เช่นกัน!