Quando devo scrivere un sacco di testo tendo spesso a tenere il dito premuto shiftquando scrivo la prima lettera di una frase che spesso dà:
[...]end of sentence. NEw sentence[...]
Qui il E
di NEw
dovrebbe essere minuscolo. Sto quindi cercando di creare una funzione che rilevi se la seconda lettera della prima parola della frase che sto scrivendo è maiuscola e che la minuscola. La parte importante sarebbe che la correzione dovrebbe essere fatta automaticamente mentre sto scrivendo la fine della mia frase.
Finora ho provato a giocare con l'evento autocommand InsertCharPre
prima di conto che il testo non può essere modificato da una funzione attivata da questo evento.
Quale sarebbe una buona soluzione?
Nota che finora non ho bisogno di concentrarmi su casi limite come gli acronimi che dovrebbero essere in maiuscolo o questo tipo di cose.
EDIT Ho fatto questo, che è una soluzione non perfetta:
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
Ha un problema poiché il primo carattere che inserisco in modalità inserimento viene spostato alla fine della riga, ma penso che possa essere corretto.
Immagino che ora la mia domanda diventi una domanda di revisione del codice :
- Come posso eliminare l'effetto collaterale che sposta il primo personaggio inserito?
- È il metodo migliore possibile?
- Questo metodo sembra rallentare Vim: come potrebbe essere migliorato?
<Space>
sembra piuttosto interessante poiché riduce il numero di invocazioni delle funzioni. Proverò a lavorare anche in questo modo!