Como definir o mapeamento do teclado Vim para o início do comando

3

Costumo escrever o buffer Vim ativo com :w e recarregar o buffer com :e para redefinir o histórico de desfazer / refazer. Eu faço isso com tanta frequência que atualizei meu arquivo .vimrc com um mapeamento de comando para :we , para fazer as duas coisas em uma etapa:

" Reset undo/redo buffer on reload
set undoreload=0

" Write and clear undo/redo buffer
cnoremap we w\|e

No entanto, esse mapeamento ainda é executado se eu inserir we no meio da linha de comando; por exemplo, :s/answer/42/ é expandido para :s/answ|er/42/ . É possível mapear we apenas se aparecer no início do comando?

    
por Huw Walters 20.12.2016 / 14:43

1 resposta

3

Aqui é um bom lugar para usar abreviações. De :h abbreviations

2. Abbreviations            *abbreviations* *Abbreviations*

Abbreviations are used in Insert mode, Replace mode and Command-line mode.
If you enter a word that is an abbreviation, it is replaced with the word it
stands for.  This can be used to save typing for often used long words.  And
you can use it to automatically correct obvious spelling errors.
Examples:

    :iab ms Microsoft
    :iab tihs this

O mais conveniente sobre abreviações em vez de mapeamentos é que elas só serão acionadas se a palavra inteira for sua abreviação.

Eu recomendaria correr:

:cnoreabbrev we w\|e

Eu testei isso e posso confirmar que a substituição:

:s/answer/42

ainda é tipável sem ser expandido para :s/answ|er/42 . Esteja avisado, porém, esta abordagem não é totalmente infalível! Você ainda pode se deparar com problemas às vezes. Por exemplo, digitando

:let foo = "we"

é expandido para

:let foo = "w|e"
    
por DJMcMayhem 20.12.2016 / 17:31

Tags