vim problema com aba / espaço em abreviações de várias linhas no vimrc

2

Eu estou tentando escrever uma abreviação vim para criar um programa de template em c

Eu dei a abreviação como abaixo no .vimrc

abbr main #include<stdio.h>
\^M#include<string.h>
\^M#include<math.h>
\^M#include<stdlib.h>
\^M
\^Mint main() {
\^M int T, N;
\^M scanf("%d", &T);
\^M while(T-- > 0) {
\^M     scanf("%d", &N);
\^M }
\^M return 0;
\^M}

Quando eu digito a palavra main , a abreviação entra em vigor, mas não é recuada corretamente. Eu tentei com apenas espaços / apenas abas / combinação, mas nada fica o código recuado perfeitamente. Por quê?

Algumaajuda?

Atualização:tenteicom

abbrmain#include<stdio.h>\<CR>#include<string.h>\<CR>\<CR>intmain(){\<CR>intT,N;\<CR>scanf("%d", &T);
\<CR>while(T-- > 0) {
\<CR>scanf("%d", &N);
\<CR>}
\<CR>return 0;
\<CR>}

Isso leva ao mesmo resultado. Alguém pode me mostrar como adicionar uma abreviação de várias linhas com recuo adequado?

    
por mtk 08.08.2015 / 16:19

1 resposta

2

Na verdade, acho que sua pergunta é um problema XY : acho que seu problema real não é How can I do a multiline abbreviation? , mas How can I easily add a sample function with a few keystrokes? . E se você quiser fazer isso, você não deve usar abreviações, mas trechos.

Por que não uma abreviação?

Primeiramente, vamos dar uma olhada em :h abbreviations :

[abbreviations] can be used to save typing for often used long words. And you can use it to automatically correct obvious spelling errors.

Abreviações são feitas para mudanças menores que uma função inteira, simplesmente não existe meta. O que você está tentando fazer normalmente é criar um snippet e algumas ferramentas excelentes já existem para que você não precise reinventar a roda.

O que é um snippet?

Para deixar claro e conciso, cito wikipedia :

Snippet is a programming term for a small region of re-usable source code, machine code, or text.

Como faço para obter alguns trechos?

Primeiro, você precisa de um repositório de trechos. É claro que você pode manualmente criá-los um a um, mas o Vim tem uma comunidade legal que já lutou com o seu problema e o resolveu.

Então snippets de vim é o que você procura: com centenas de snippets para mais de 60 idiomas (incluindo uma função C main ()) é uma excelente base para começar. É claro que você pode adicionar seus próprios trechos se achar que um está faltando.

Como eu uso esses snippets?

Agora que você tem seus snippets, é necessário um mecanismo de snippet que permita adicioná-los aos seus buffers. O leia-me dos snippets-vim tem uma seção dedicada aos mecanismos suportados.

Eu recomendo ultisnips mas isso é apenas uma questão pessoal e você deve experimentar os diferentes mecanismos sugeridos para ver qual deles é o seu favorito.

Como obtenho isso?

Se você estiver usando um gerenciador de plug-ins é muito fácil. Por exemplo, com vim-plug você simlpy adiciona essa linha ao seu .vimrc :

Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'

Em seguida, você pode seguir a configuração básica recommanded no ultisnips readme :

let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<c-b>"
let g:UltiSnipsJumpBackwardTrigger="<c-z>"

Depois de usar :PluginInstall , você pode começar a usar seus snippets com a aba .

    
por 11.09.2015 / 18:47

Tags