Cuando tengo que escribir mucho texto, a menudo tiendo a mantener mi dedo presionado shiftcuando escribo la primera letra de una oración que a menudo me da:
[...]end of sentence. NEw sentence[...]
Aquí el E
de NEw
debe ser minúscula. Luego estoy tratando de crear una función que detecte si la segunda letra de la primera palabra de la oración que estoy escribiendo es mayúscula y la minúscula. La parte importante sería que la corrección debe hacerse automáticamente mientras escribo el final de mi oración.
Hasta ahora he intentado jugar con el evento de autocomando InsertCharPre
antes de darme cuenta de que el texto no puede ser modificado por una función activada por este evento.
¿Cuál sería una buena solución?
Tenga en cuenta que hasta ahora no necesito centrarme en casos de bordes como acrónimos que deberían estar en mayúsculas o este tipo de cosas.
EDITAR He hecho esto, que es una solución no perfecta:
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
Tiene un problema ya que el primer carácter que ingreso en el modo de inserción se mueve al final de la línea, pero creo que se puede corregir.
Supongo que ahora mi pregunta se convierte en una pregunta de revisión de código :
- ¿Cómo puedo deshacerme del efecto secundario que mueve el primer personaje insertado?
- ¿Es el mejor método posible?
- Este método parece ralentizar Vim: ¿cómo podría mejorarse?
<Space>
parece bastante interesante, ya que reduce el número de invocaciones de las funciones. ¡Intentaré trabajar de esta manera también!