Abreviações de modo de inserção Vim com comandos de modo normal

1

Eu estou olhando para fazer uma abreviatura do vim s que se eu digitar "prf" no modo de inserção ele imprime printf(""); e imediatamente me joga de volta no modo de inserção, mas entre as duas citações. Eu não consigo descobrir como fazer isso ... alguém pode ajudar?

    
por user339365 29.06.2014 / 06:34

3 respostas

4

A desvantagem dos mapeamentos do modo de inserção é que cada digitado p aparecerá agora com um atraso no buffer, já que o Vim precisa verificar se o mapeamento prf completo deve ser aplicado ou não. Melhor usar uma abreviatura :

:ia prf printf();<Left><Left>

Ao omitir o " da abreviação, você pode acioná-lo digitando prf" , e isso evita o problema descrito por @Dmitry Alexandrov.

Variante avançada

snippets são como o :abbreviate dos esteróides, geralmente com inserções de parâmetros, espelhamento e várias paradas dentro deles. Um dos primeiros, muito famosos (e ainda amplamente utilizados) plugins Vim é snipMate (inspirado em o editor TextMate ); infelizmente, não é mais mantido; embora haja um garfo . Uma alternativa moderna (que requer o Python) é UltiSnips . Há mais, veja esta lista no Vim Tips Wiki .

Há três coisas a serem avaliadas: primeiro, os recursos do próprio mecanismo de snippet; segundo, a qualidade e a amplitude dos snippets fornecidos pelo autor ou por outros; terceiro, como é fácil adicionar novos trechos.

    
por 29.06.2014 / 11:20
2

Experimente :inoremap prf printf("");<ESC>hhi

Digitará printf(""); , vá para o modo normal (comando) ( <ESC> ), mova para a esquerda 2 vezes ( hh ) e, em seguida, entre novamente no modo de inserção ( i ).

    
por 29.06.2014 / 06:42
1

Embora o mapeamento possa ser mais adequado aqui, de fato, responderei à sua pergunta literal: "Como usar comandos de modo normal em abreviaturas?"

Na verdade, você pode fazer exatamente da mesma maneira como usaria os comandos do modo normal no modo de entrada:

:inoreabbr prf printf("");<Esc>2hi

ou

:inoreabbr prf printf("");<C-o>3h

A desvantagem de usar uma abreviação aqui é que ela é expandida geralmente pressionando espaço e esse espaço não é removido - ele é inserido. Então digitando prf<space> você obteria:

printf(" ❙");

em que representa a posição do cursor. Para obter

printf("❙");

você precisa pressionar C-] em vez de <space> .

    
por 29.06.2014 / 08:25

Tags