Como entrar no modo de inserção colocando em maiúscula a primeira letra que escrevo?

Como entrar no modo de inserção colocando em maiúscula a primeira letra que escrevo?

Estou fazendo uma tarefa repetitiva para a qual defini uma macro em uma das teclas F, mas ainda preciso manter pressionada a tecla Shift para digitar a primeira letra toda vez que executo essa macro. Eu me perguntei se isso também poderia ser incluído na macro, mas minha busca por maneiras de fazer isso foi infrutífera.

Existem várias maneiras de entrar no modo de inserção, relacionadas à posição do cursor no texto. Mas posso definir uma macro que coloque em maiúscula a primeira letra que escrevo após entrar no modo de inserção, e somente isso?

Responder1

Bem, esta é uma solução meio hacky, mas parece funcionar. Não tenho certeza de como você deseja mapeá-lo, então mapeei <leader>ino meu exemplo. Sinta-se à vontade para alterar 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 'inserir maiúscula') que configura dois comandos automáticos. O primeiro comando automático é aquele logo antes de entrar no modo de inserção:

Então, após chamar foo e imediatamente após sair do modo de inserção, acontecerá o seguinte:

  • Tipos Vim <C-o>gUl. Isso irá para o local anterior na lista de atalhos e converterá o caractere sob o cursor em letras maiúsculas. Depois disso, o vim digita gi<esc>. Esta é uma maneira hackeada de levar o cursor de volta ao local anterior. Em teoria, <C-i>deveria funcionar, mas enquanto o testava me deparei com problemas estranhos.

  • O Vim exclui todos os comandos automáticos pertencentes a esta 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 poderia fazer um mapeamento como este:

nnoremap <leader>i :call Icap()<cr>

o que permitiria que você usasse outros comandos para entrar no modo de inserção ( c, a, I, o, s, etc.) e ainda obter os efeitos colaterais da capitalização.

informação relacionada