Для vim существует множество плагинов для сниппетов: ultisnips , snipmate , xptemplate , neosnippet и многие другие.
Все они имеют свои плюсы и минусы и более или менее зависимые. До сих пор я использовал ultisnips, но никогда не был полностью удовлетворен этим.
Поскольку у нас есть очень интересный и полный вопрос о менеджерах плагинов, я думаю, что было бы весьма полезно иметь такие же объяснения о плагинах сниппетов.
Существует листинг здесь , который может быть хорошее начало , но некоторые полные, ясные и precises ответов , как наше сообщество может писать было бы очень полезно.
plugin-ultisnips
snippets
statox
источник
источник
Ответы:
Я использую ультиснипс уже несколько недель.
Я думаю, что основные преимущества этого плагина следующие:
Прежде всего ultisnips - это движок фрагментов, который означает, что плагин предоставляет функции для использования фрагментов, но не предоставляет сами фрагменты. Чтобы получить фрагменты, автор рекомендует vim-фрагменты .
После того, как вы установили оба плагина, вы сможете использовать свои фрагменты.
Фрагменты определения хранятся в файлах , названных следующих моделей:
ft.snippets
,ft_*.snippets
илиft/*
, гдеft
это „Filetype“ текущего документа и*
представляет собой оболочку, как по шаблону соответствия любая строка , включая пустую строку. (Обратите внимание, чтоcuda.cpp
поддерживается точечный синтаксис типа файла .)Таким образом, фрагменты, специфичные для типа файла, раскрываются, только если установлен тип файла буфера. Для
all
создания фрагментов, развернутых во всех буферах, доступен специальный тип файла .В дополнение к фрагментам, предоставляемым vim-snippets, пользователь может определять свои собственные фрагменты. Я рекомендую размещать их в каталоге
~/.vim/my-snippets/Ultisnips
таким образом, чтобы Ultisnips находил их без дополнительной настройки, и их было бы легко поддерживать в репозитории dotfile.Чтобы расширить фрагменты, Ultisnips предоставляет переменную,
g:UltiSnipsExpandTrigger
которая определяет отображение, которое будет запускать расширение (я выбрал, **что довольно удобно для меня). Обратите внимание, что интеграция должна быть возможной, но я не проверял ее сам).Для опытных пользователей Ultisnips также предоставляет некоторые функции для настройки поведения расширения или для его запуска по-другому. Видеть
:h UltiSnips-trigger-functions
Это первый менеджер сниппетов, который я действительно широко использовал, и я думаю, что он хороший для начала, поскольку он прост в использовании и имеет возможность настройки.
Наконец, вот список скринкастов, которые дают хорошее представление о плагине:
источник
>
(как в закрывающей скобке HTML. Тот факт, что он не знает его в конце тега, раздражает, потому что если я включаю опция ,i
то она делает это так , что расширяет его , даже если его в середине слова , которые не лучшим образом .Я использую оригинальный SnipMate с тех пор, как начал использовать Vim.
Мне не на что жаловаться.
источник
Вот список функций из mu-шаблона . Discl .: Я его сопровождающий.
while
управляющем утверждении);if (...) {\n}
?if (...)\n{\n}
Что - то еще?), И, конечно, они могут быть точно настроены в зависимости от текущего проекта или текущего типа файлов, или даже оба;Лицензия совместима с генерацией кода - это означает, что, хотя код mu-шаблона находится под GPLv3, фрагменты - нет, вы можете использовать их в проприетарном коде: хотя некоторые фрагменты находятся под лицензией Boost Software License;
Раскрытие происходит после загрузки любых существующих локальных vimrcs - для того, чтобы установить специфичные для проекта переменные до того, как расширение будет выполнено.
Благодаря плагину Tom Link StakeHolders, µTemplate имеет связанные заполнители (изменение одного именованного заполнителя изменяет другие заполнители с тем же именем). Отказ от установки заинтересованных сторон не помешает вам использовать µTemplate.
Честно говоря, синтаксис шаблона немного громоздок, а система заполнителей относится к первому поколению заполнителей - mu-template является одним из старейших движков шаблонов / фрагментов для Vim.
Однако тот факт, что он позволяет фрагментам включать другие фрагменты (условно и с параметрами), которые могут или не могут быть переопределены, очень важен. Типичные приложения
шаблон файла C ++
У меня есть общий фрагмент класса / мастера в lh-cpp. И несколько специализированных классов классов, которые используют этот общий шаблон класса, но с разными параметрами.
источник
All snippets are defined in their own template-file -- all other snippet engines use one file per filetype and put all snippets in it
чем преимущество этой архитектуры по сравнению с обычной (то есть один файл по типу файла)?internals/class-skeleton
. Я бы предпочел, чтобы он не смешивался с фрагментами контрольного оператора. Но я должен признать, что объединить все контрольные заявления не было бы так проблематично. Более того, благодаря такому подходу я могу очень легко переопределить мои фрагменты, обновить их на лету, использовать их в качестве функций и т. Д.SnipMate и UltiSnips - два самых популярных движка сниппета для Vim. Оба основаны на синтаксисе текста TextMate. UltiSnips может запускать все фрагменты SnipMate, но также имеет дополнительный синтаксис, чтобы сделать его более мощным.
Хорошее практическое правило заключается в том, что если у вашего Vim есть поддержка Python, используйте UltiSnips. Если нет, то используйте SnipMate.
По моему
.vimrc
, я загружаю (используя Plug) любой плагин в зависимости от доступности Python.UltiSnips также может запускать коды Python в своем фрагменте, что позволяет ему выполнять некоторые интересные трюки. Это один из моих любимых фрагментов, который рисует рамку вокруг текста (из статьи « Как я могу делать заметки на лекциях по математике с использованием LaTeX и Vim | Gilles Castel» ).
С помощью этого фрагмента я могу вывести что-то вроде этого:
источник