Kiedy muszę pisać dużo tekstu, często mam tendencję do przytrzymywania palca shiftpodczas pisania pierwszej litery zdania, które często daje:
[...]end of sentence. NEw sentence[...]
Tutaj E
od NEw
powinny być małe. Usiłuję następnie utworzyć funkcję, która wykrywa, czy druga litera pierwszego słowa wpisywanego zdania jest wielka, a która pisałaby małą literą. Ważną częścią byłoby to, że korekta powinna być wykonana automatycznie podczas pisania końca zdania.
Do tej pory próbowałem grać ze zdarzeniem autocommand, InsertCharPre
zanim zdałem sobie sprawę, że tekst nie może być modyfikowany przez funkcję wywoływaną przez to zdarzenie.
Jakie byłoby dobre rozwiązanie?
Zauważ, że do tej pory nie muszę skupiać się na przypadkach krawędzi, takich jak akronimy, które powinny być pisane wielkimi literami lub tego rodzaju rzeczy.
EDYCJA Zrobiłem to, co nie jest idealnym obejściem:
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
Ma problem, ponieważ pierwszy znak, który wprowadzam w trybie wstawiania, jest przenoszony na koniec linii, ale myślę, że można to poprawić.
Chyba teraz moje pytanie staje się pytaniem o weryfikację kodu :
- Jak mogę pozbyć się efektu ubocznego, który porusza pierwszą wstawioną postać?
- Czy to najlepsza możliwa metoda?
- Ta metoda wydaje się spowalniać Vima: jak można ją ulepszyć?
<Space>
wydaje się dość interesujący, ponieważ zmniejsza liczbę wywołań funkcji. Spróbuję też pracować w ten sposób!