Quando tenho que digitar muito texto, costumo manter o dedo pressionado shiftquando escrevo a primeira letra de uma frase que geralmente fornece:
[...]end of sentence. NEw sentence[...]
Aqui o E
de NEw
deve estar em minúsculas. Estou, então, tentando criar uma função que detecte se a segunda letra da primeira palavra da frase que estou digitando está em maiúscula e em minúscula. A parte importante seria que a correção fosse feita automaticamente enquanto eu estiver digitando o final da minha frase.
Até agora, tentei jogar com o evento de comando automático InsertCharPre
antes de perceber que o texto não pode ser modificado por uma função acionada por esse evento.
Qual seria uma boa solução?
Observe que até agora não preciso focar em maiúsculas ou minúsculas, como siglas, que devem estar em maiúsculas ou esse tipo de coisa.
EDIT Eu fiz isso, que é uma solução não-perfeita:
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
Ele tem um problema, já que o primeiro caractere inserido no modo de inserção é movido para o final da linha, mas acho que isso pode ser corrigido.
Acho que agora minha pergunta se torna uma questão de revisão de código :
- Como posso me livrar do efeito colateral que move o primeiro caractere inserido?
- É o melhor método possível?
- Esse método parece desacelerar o Vim: como ele pode ser melhorado?
<Space>
parece bastante interessante, pois reduz o número de invocações das funções. Vou tentar trabalhar dessa maneira também!