เมื่อฉันต้องพิมพ์ข้อความจำนวนมากฉันมักจะกดนิ้วของฉัน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>
ดูน่าสนใจทีเดียวเนื่องจากลดจำนวนการเรียกใช้ฟังก์ชัน ฉันจะพยายามทำงานด้วยวิธีนี้เช่นกัน!