Quand je dois taper beaucoup de texte, j'ai souvent tendance à garder le doigt appuyé shiftlorsque j'écris la première lettre d'une phrase qui donne souvent:
[...]end of sentence. NEw sentence[...]
Ici , le E
de NEw
devrait être en minuscules. J'essaie alors de créer une fonction qui détecterait si la deuxième lettre du premier mot de la phrase que je tape est en majuscule et qui la minuscule. L'important serait que la correction soit effectuée automatiquement pendant que je tape la fin de ma phrase.
Jusqu'à présent, j'ai essayé de jouer avec l'événement de la commande automatique InsertCharPre
avant de réaliser que le texte ne peut pas être modifié par une fonction déclenchée par cet événement.
Quelle serait une bonne solution?
Notez que jusqu'à présent, je n'ai pas besoin de me concentrer sur les cas marginaux comme les acronymes qui devraient être en majuscules ou ce genre de choses.
EDIT J'ai fait ceci, ce qui n'est pas une solution de contournement parfaite:
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
Il y a un problème puisque le premier caractère que j'entre en mode insertion est déplacé à la fin de la ligne, mais je pense que cela peut être corrigé.
Je suppose que maintenant ma question devient une question de révision de code :
- Comment puis-je me débarrasser de l'effet secondaire qui déplace le premier caractère inséré?
- Est-ce la meilleure méthode possible?
- Cette méthode semble ralentir Vim: comment pourrait-elle être améliorée?
<Space>
semble assez intéressante car elle réduit le nombre d'appels des fonctions. J'essaierai de travailler de cette façon aussi!