Melhor maneira de abreviar divisores no Vim

1

Eu queria que uma abreviação simples funcionasse como um divisor de páginas rápido como

digitação:

'> > >'

torna-se:

'==============='

2 outros requisitos: 1) Eu quero ser capaz de executar abreviações em série (mais de uma em uma linha) e 2) para poder digitar o texto após o divisor, em seguida, ser capaz de adicionar outro divisor. Então, um divisor final pode ser assim:

============================== TEXT HEADER =============== ===============

Eu tentei a seguinte linha:

iabbr <silent> >>> ===============<c-r>=Eatchar('\m\s\<bar>/')<cr>

... mas não pode executar os requisitos acima devido a sutilezas envolvendo a classe dos caracteres anteriores (veja: h full-id, etc). Eu terminei com o seguinte então:

inoremap >>> ===============<c-r>=Eatchar('\m\s\<bar>/')<cr>

Funciona, mas meu sentimento era de que um remapeamento poderia ser exagerado quando tudo que eu realmente quero é uma simples substituição de string. Existe uma maneira melhor de fazer isso?

    
por traycerb 04.04.2014 / 01:50

1 resposta

0

A maneira mais fácil de lidar com isso é provavelmente chamar uma função definida pelo usuário. Eu fiz a seguinte prova de conceito. Algumas desvantagens:

Se você usar abreviações em vez de mapeamentos, o caractere digitado após a abreviação que o aciona será incluído como parte do texto capturado do usuário pela chamada input() , por isso usei um mapeamento.

O problema com um mapeamento é que quando você digita um > ele não aparecerá no arquivo até que você digite algo que diga ao Vim que você não está tentando acionar o mapeamento (ou espere o tempo suficiente para que a detecção do mapeamento atinja o tempo limite).

imap <expr> >>> MyHeader('=')

function! MyHeader(fillchar)
    let l:text = input("Header Text: ")
    let l:len = ((&tw ? &tw : 79) - len(text) - 2) / 2
    let l:fill = repeat(a:fillchar, l:len)
    return l:fill . ' ' . l:text . ' ' . l:fill
endfunction

Como esta é apenas uma prova de conceito, não tentei aperfeiçoá-la. Por exemplo, a largura do cabeçalho pode ser "off by one" se o número de caracteres no texto do cabeçalho ou o textwidth for um número ímpar. Vou deixar para você corrigir isso e adicionar outros refinamentos que você quiser.

    
por 04.04.2014 / 03:18

Tags