Bem, isso é meio que uma solução hacky, mas parece funcionar. Não sei exatamente como você deseja mapeá-lo, então mapeei para <leader>i
no meu exemplo. Sinta-se à vontade para mudar isso para o que quiser.
function! Icap()
augroup icap
au InsertLeave * exec "normal! \<C-o>gUlgi\<esc>:augroup icap | au! | augroup END\<cr>"
au InsertEnter * exec "normal! m'"
augroup END
endfunction
nnoremap <leader>i :call Icap()<cr>i
O que isto faz é definir uma função "Icap" (abreviação de 'insert capitalize') que configura dois comandos automáticos. O primeiro autocommand, é isso mesmo antes de entrar no modo de inserção:
- O Vim adiciona a localização atual do cursor ao jumplist .
Depois de chamar foo e imediatamente após sair do modo de inserção, ocorrerá o seguinte:
-
Tipos de vim
<C-o>gUl
. Isso irá saltar para o seu local anterior no jumplist e converter o caractere sob o cursor para maiúscula. Depois disso, o vim digitagi<esc>
. Esta é uma maneira hacky de levar o cursor de volta ao local anterior. Em teoria,<C-i>
deve funcionar, mas enquanto eu estava testando, tive problemas estranhos. -
O vim exclui todos os comandos automáticos pertencentes a essa função. Isso evita que futuras alterações no modo de inserção façam edições estranhas que você não deseja.
Você também pode fazer um mapeamento como este:
nnoremap <leader>i :call Icap()<cr>
que permitiria usar outros comandos para entrar no modo de inserção ( c
, a
, I
, o
, s
, etc.) e ainda obter os efeitos colaterais de capitalização. / p>