Adicionando uma abreviatura para espaços no vim

Adicionando uma abreviatura para espaços no vim

Estou tentando adicionar a seguinte abreviatura no vim, mas não está funcionando.

    noreabbrev <space><space>  .<space>

É exatamente como o teclado da maioria dos telefones modernos.

então alguém pode me dizer o que estou fazendo de errado aqui e como fazer funcionar?

Responder1

Existem três tipos de abreviaturas: full-id, end-id, non-id, cada uma com condições específicas sobre os conjuntos de caracteres permitidos. Ver :help abbreviations. Não são permitidos dois espaços em nenhum deles.

Você tem que usar um :inoremap(e conviver com o inevitável atraso com que o primeiro caractere de espaço aparecerá no buffer), ou construir um complexo :inoremap <expr> <Space>que verifique o caractere anterior e só então faça sua mágica.

Responder2

Eu rapidamente hackeei isso juntos. Coloque-o em um arquivo chamado InsertSpace.vimou qualquer outra coisa e obtenha-o do seu vimrc ou coloque-o em ~/.vim/plugin/( ~\vimfiles\pluginno Windows):

function! s:InsertSpace()
    if getline('.')[col('.')-3:col('.')-2] =~ '[^. ]\s$'
        return "\<bs>. "
    else
        return ' '
    endif
endfunction

inoremap <expr> <space> <SID>InsertSpace()

Isso não será perfeito, mas pode ser refinado.

informação relacionada