Como inserir o modo de inserção capitalizando a primeira letra que escrevo?

3

Eu estou fazendo uma tarefa repetitiva para a qual eu defini uma macro em uma das teclas F, mas ainda tenho que manter a mudança para baixo para digitar a primeira letra toda vez que eu executar essa macro. Gostaria de saber se isso pode ser incluído na macro também, 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 capitalize a primeira letra que escrevo depois de entrar no modo de inserção, e apenas isso?

    
por ReneSac 17.10.2016 / 03:05

1 resposta

4

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 digita gi<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>     

por 17.10.2016 / 04:10

Tags