Capitaliza automaticamente a primeira letra da frase no Vim

2

Ao escrever no MS Word ou no Open Office, a primeira letra de cada sentença é automaticamente capitalizada pelo editor, sem a necessidade de pressionar a tecla Shift. Isso torna a digitação muito mais fácil.

Existe um script, modo ou algo que fará com que o Vim também capitalize a primeira letra de todas as sentenças automaticamente, conforme você digita?

    
por sashoalm 03.04.2014 / 08:19

2 respostas

2

Isso pode ser feito com :help :map-expr mappings para todos os caracteres minúsculos que verificam o final de uma frase anterior. Se houver um caractere de finalização de frase antes do cursor, ele retornará o caractere maiúsculo, caso contrário, o caractere minúsculo digitado.

Você pode forçar um caractere minúsculo após um caractere de finalização de frase pressionando Shift enquanto digita o caractere. Ou seja, com efeito, o caso é "alternado" para a primeira letra.

Eu uso um loop para criar os mapeamentos individuais:

for char in split('abcdefghijklmnopqrstuvwxyz', '\zs')
    exe printf("inoremap <expr> %s search('[.!?]\_s\+\%%#', 'bcnw') ? '%s' : '%s'", char, toupper(char), char)
endfor

for char in split('ABCDEFGHIJKLMNOPQRSTUVWXYZ', '\zs')
    exe printf("inoremap <expr> %s search('[.!?]\_s\+\%%#', 'bcnW') ? '%s' : '%s'", char, tolower(char), char)
endfor
    
por 03.04.2014 / 09:33
0

Acho que para isso eu usaria um autocmd InsertCharPre para verificar o início de uma frase e converter v: char para maiúsculas, se encontrado.

Eu roubei o regex para encontrar um final de frase da resposta de Ingo e ajustei-o para também trabalhar na primeira linha do arquivo. Foi isso que eu criei:

augroup SENTENCES
  au!
  autocmd InsertCharPre * if search('\v(%^|[.!?]\_s)\_s*%#', 'bcnw') != 0 | let v:char = toupper(v:char) | endif
augroup END

Note que você pode manualmente ignorar o autocmd (ou um mapeamento) para inserir um caractere minúsculo, se você digitar CTRL + V antes de inserir o caractere para inseri-lo literalmente. A menos que você tenha remapeado CTRL + V para outra coisa, como colar. Então você deve ser capaz de usar CTRL + Q.

    
por 05.04.2014 / 06:52

Tags