Es gibt eine große Anzahl von Snippets-Plugins für Vim: Ultisnips , Snipmate , Xptemplate , Neosnippet und vieles mehr.
Sie alle haben Vor- und Nachteile und mehr oder weniger Abhängigkeiten. Bisher habe ich Ultisnips verwendet, war aber noch nie total zufrieden damit.
Da wir eine sehr interessante und vollständige Frage zu Plugin-Managern haben, halte ich es für ziemlich nützlich, die gleichen Erklärungen zu Snippets-Plugins zu haben.
Es gibt hier eine Auflistung , die ein guter Anfang sein könnte, aber einige vollständige, klare und präzise Antworten, die unsere Community schreiben kann, wären ziemlich nützlich.
plugin-ultisnips
snippets
statox
quelle
quelle
Antworten:
Ich benutze Ultisnips seit einigen Wochen.
Ich denke, die Hauptvorteile dieses Plugins sind die folgenden:
Zunächst einmal ist ultisnip eine Snippet-Engine, was bedeutet, dass das Plugin Funktionen zur Verwendung von Snippets bereitstellt, die Snippets selbst jedoch nicht. Um die Snippets zu erhalten, empfiehlt der Autor vim-snippets .
Sobald Sie beide Plugins installiert haben, können Sie Ihre Snippets verwenden.
Die Schnipsel Begriffsbestimmungen in Dateien gespeichert sind , folgenden Muster genannt:
ft.snippets
,ft_*.snippets
, oderft/*
, woft
ist der ‚Dateityp‘ des aktuellen Dokuments und*
eine schalenartige Wildcard - Matching beliebige Zeichenfolge einschließlich dem leeren String. (Beachten Sie, dass die Syntax von gepunkteten Dateitypencuda.cpp
unterstützt wird.)Auf diese Weise werden für einen Dateityp spezifische Snippets nur dann erweitert, wenn der Dateityp des Puffers festgelegt ist. Ein spezieller Dateityp
all
ist verfügbar, um Snippets zu erstellen, die auf allen Puffern erweitert sind.Zusätzlich zu den von vim-snippets bereitgestellten Snippets kann der Benutzer eigene Snippets definieren. Meine Empfehlung wäre, sie so in das Verzeichnis zu stellen
~/.vim/my-snippets/Ultisnips
, dass Ultisnips sie ohne zusätzliche Konfiguration findet, und es ist einfach, sie in einem Dotfile-Repository zu verwalten.Um die Snippets zu erweitern, stellt Ultisnips eine Variable zur Verfügung,
g:UltiSnipsExpandTrigger
die das Mapping definiert, das die Erweiterung auslöst (ich habe gewählt, **was für mich recht praktisch ist). Beachten Sie, dass eine Integration möglich sein sollte, aber ich habe es nicht selbst getestet).Für Power-User bietet Ultisnips auch einige Funktionen, um das Verhalten der Erweiterung anzupassen oder sie anders auszulösen. Sehen
:h UltiSnips-trigger-functions
Dies ist der erste Snippet-Manager, den ich wirklich ausgiebig verwendet habe, und ich denke, dies ist zunächst einmal ein guter, da er sofort einsatzbereit ist und gestimmt werden kann.
Zum Schluss hier eine Liste von Screencasts, die eine gute Einführung in das Plugin geben:
quelle
>
(wie in schließender Klammer von HTML) Die Optioni
dann macht es so, dass es es erweitert, auch wenn es in der Mitte eines Wortes, das nicht gut ist.Ich benutze den ursprünglichen SnipMate seit ich Vim benutze.
Ich habe nichts zu beanstanden.
quelle
Hier ist eine Liste der Funktionen von mu-template . Discl .: Ich bin sein Betreuer.
while
Steueranweisung);if (...) {\n}
?if (...)\n{\n}
Etwas anderes?), Und natürlich können sie fein je nach dem aktuellen Projekt abgestimmt werden, oder die aktuelle Datei des Typs, oder sogar beides;Die Lizenz ist mit der Codegenerierung kompatibel. Das bedeutet, dass mu-template-Code zwar unter GPLv3, die Snippets jedoch nicht. Sie können sie jedoch in proprietärem Code verwenden. Einige Snippets befinden sich jedoch unter Boost Software License.
Die Erweiterung erfolgt nach dem Laden vorhandener lokaler vimrcs, um projektspezifische Variablen festzulegen, bevor die Erweiterung durchgeführt wird.
Dank des StakeHolders-Plugins von Tom Link hat µTemplate Platzhalter gebunden (durch Ändern eines benannten Platzhalters werden andere Platzhalter mit demselben Namen geändert). Wenn Sie Stakeholder nicht installieren, können Sie µTemplate nicht verwenden.
Um ganz ehrlich zu sein, ist die Template-Syntax etwas umständlich und das Platzhaltersystem gehört zur ersten Platzhalter-Generation - mu-template ist eine der ältesten Template- / Snippets-Engines für Vim.
Es ist jedoch sehr wichtig, dass Snippets andere Snippets (bedingt und mit Parametern) enthalten können, die möglicherweise überschrieben werden oder nicht. Typische Anwendungen sind
die C ++ - Dateivorlage
Ich habe ein allgemeines Klassen-Snippet / Wizard in lh-cpp. Und mehrere spezialisierte Klassenarten , die diese gemeinsame Klassenvorlage verwenden, aber unterschiedliche Parameter haben.
quelle
All snippets are defined in their own template-file -- all other snippet engines use one file per filetype and put all snippets in it
was ist der Vorteil dieser Architektur gegenüber der üblichen (dh eine Datei pro Dateityp)?internals/class-skeleton
zum Beispiel lh-cpp an. Ich hätte es lieber nicht mit den Kontrollanweisungsschnipsel gemischt. Aber ich muss zugeben, dass es nicht so problematisch wäre, alle Kontrollanweisungen zusammen zu haben. Darüber hinaus kann ich dank dieses Ansatzes sehr einfach meine Snippets überschreiben, sie im laufenden Betrieb aktualisieren, sie als Funktionen verwenden usw.SnipMate und UltiSnips sind die beiden beliebtesten Snippet-Engines für Vim. Beide sind von der Snippet-Syntax von TextMate inspiriert. UltiSnips kann alle SnipMate-Snippets ausführen, verfügt jedoch auch über eine zusätzliche Syntax, um die Funktionalität zu verbessern.
Als Faustregel gilt: Wenn Ihr Vim Python unterstützt, verwenden Sie UltiSnips. Wenn nicht, verwenden Sie SnipMate.
In my
.vimrc
lade ich (mit Plug) je nach Python-Verfügbarkeit eines der beiden Plugins.UltiSnips kann auch Python-Codes in seinem Snippet ausführen, sodass es einige coole Tricks ausführen kann. Dies ist einer meiner Lieblingsausschnitte, der ein Kästchen um einen Text zeichnet (von Wie ich in Mathematik-Vorlesungen mit LaTeX und Vim | Gilles Castel Notizen machen kann )
Mit diesem Snippet kann ich so etwas ausgeben:
quelle