Existe um grande número de plugins de snippets para o vim: ultisnips , snipmate , xptemplate , neosnippet e muito mais.
Todos eles têm prós e contras e mais ou menos dependências. Até agora, uso ultisnips, mas nunca fiquei totalmente satisfeito com isso.
Como temos uma pergunta muito interessante e completa sobre os gerenciadores de plugins , acho que seria bastante útil ter o mesmo tipo de explicação sobre os plugins de snippets.
Há uma lista aqui que pode ser um bom começo, mas algumas respostas completas, claras e precisas, conforme nossa comunidade pode escrever, seriam bastante úteis.
plugin-ultisnips
snippets
statox
fonte
fonte
Respostas:
Estou usando ultisnips há várias semanas.
Eu acho que as principais vantagens deste plugin são as seguintes:
Antes de tudo, o ultisnips é um mecanismo de snippet, o que significa que o plug-in fornece recursos para usar snippets, mas não fornece os snippets. Para obter os trechos, o autor recomenda vim-snippets .
Depois de instalar os dois plug-ins, você poderá usar seus snippets.
Os trechos de definições são armazenadas em arquivos chamados seguinte padrões:
ft.snippets
,ft_*.snippets
ouft/*
, ondeft
é o 'filetype' do documento atual e*
é um shell-like correspondência curinga qualquer cadeia, incluindo a cadeia vazia. (Observe que a sintaxe do tipo de arquivo pontilhadocuda.cpp
é suportada.)Dessa maneira, fragmentos específicos para um tipo de arquivo são expandidos apenas quando o tipo de arquivo do buffer é definido. Um tipo de arquivo especial
all
está disponível para criar trechos expandidos em todos os buffers.Além dos snippets fornecidos pelos vim-snippets, o usuário pode definir seus próprios snippets. Minha recomendação seria colocá-los no diretório
~/.vim/my-snippets/Ultisnips
desta maneira, o Ultisnips os encontrará sem configuração adicional e é fácil mantê-los em um repositório dotfile.Para expandir os trechos, o Ultisnips fornece uma variável
g:UltiSnipsExpandTrigger
que define o mapeamento que acionará a expansão (eu escolhi o **que é bastante conveniente para mim). Observe que uma integração deve ser possível, mas eu não a testei sozinha).Para usuários avançados, o Ultisnips também fornece algumas funções para personalizar o comportamento da expansão ou para acioná-lo de maneira diferente. Vejo
:h UltiSnips-trigger-functions
Este é o primeiro gerenciador de trechos que eu realmente usei extensivamente e acho que esse é um bom começo, por sua simplicidade imediata e por sua possibilidade de ser ajustado.
Finalmente, aqui está uma lista de screencasts que fornecem uma boa introdução ao plugin:
fonte
>
(como na chave de fechamento do HTML. O fato de ele não saber que no final de uma tag é irritante, porque se eu ativar a opçãoi
, em seguida, torna-se por isso expande-lo mesmo se sua no meio de uma palavra que não é bom.Eu uso o SnipMate original desde que comecei a usar o Vim.
Não tenho nada a reclamar.
fonte
Aqui está uma lista de recursos do mu-template . Discl .: Sou seu mantenedor.
while
instrução de controle);if (...) {\n}
?if (...)\n{\n}
Algo mais?), E, claro, eles podem ser ajustados de acordo com o projeto atual, ou o tipo de arquivo atual, ou mesmo ambos;A licença é compatível com a geração de código - isso significa que, embora o código mu-template esteja sob a GPLv3, os trechos não estejam, você pode usá-los no código proprietário: alguns trechos estão sob a Boost Software License;
A expansão ocorre após o carregamento de todos os vimrcs locais presentes - para definir variáveis específicas do projeto antes que a expansão seja concluída.
Graças ao plug-in StakeHolders de Tom Link, o µTemplate possui espaços reservados vinculados (a modificação de um espaço reservado nomeado modifica outros espaços reservados com o mesmo nome). A não instalação das partes interessadas não impedirá o uso do µTemplate.
Para ser sincero, a sintaxe do modelo é um pouco complicada e o sistema de espaço reservado pertence à primeira geração de espaços reservados - o mu-template é um dos mais antigos mecanismos de modelo / snippets do Vim.
No entanto, o fato de permitir que trechos incluam outros trechos (condicionalmente e com parâmetros) que podem ou não ser substituídos é muito importante. Aplicações típicas são
o modelo de arquivo C ++
Eu tenho um snippet / assistente de classe genérico no lh-cpp. E vários tipos de classes especializadas que usam esse modelo de classe comum, mas com parâmetros diferentes.
fonte
All snippets are defined in their own template-file -- all other snippet engines use one file per filetype and put all snippets in it
qual é a vantagem dessa arquitetura em comparação com a habitual (ou seja, um arquivo por tipo de arquivo)?internals/class-skeleton
por exemplo. Prefiro não misturá-lo com os trechos da declaração de controle. Mas devo admitir que ter todas as declarações de controle juntas não seria tão problemático. Além disso, graças a esta abordagem, que pode muito facilmente substituir meus trechos, atualizá-los em tempo real, usá-los como funções, etcSnipMate e UltiSnips são os dois mecanismos de snippet mais populares para o Vim. Ambos são inspirados na sintaxe do snippet do TextMate. O UltiSnips pode executar todos os snippets do SnipMate, mas também possui sintaxe adicional para torná-lo mais poderoso.
Uma boa regra geral é que, se o seu Vim tiver suporte a python, use o UltiSnips. Caso contrário, use o SnipMate.
No meu
.vimrc
, eu carrego (usando o Plug) qualquer um dos plugins, dependendo da disponibilidade do python.O UltiSnips também pode executar códigos python em seu snippet, permitindo fazer alguns truques interessantes. Este é um dos meus trechos favoritos que desenham uma caixa em torno de um texto (de Como eu sou capaz de fazer anotações em aulas de matemática usando o LaTeX e o Vim | Gilles Castel )
Com esse trecho, posso gerar algo assim:
fonte