Frage

Ich verwende seit Kurzem Vim als meinen Texteditor und arbeite derzeit an meinen eigenen Anpassungen.

Ich nehme an, dass Tastaturbelegungen so ziemlich alles können, aber im Moment verwende ich sie fast ausschließlich als eine Art Snippets-Funktion.

Also zum Beispiel, wenn ich tippe def{TAB} (:imap def{TAB} def ():<ESC>3ha), es erweitert sich zu:

def |(): # '|' represents the caret

Das funktioniert wie erwartet, aber ich finde es ärgerlich, wenn Vim auf einen vollständigen Befehl wartet, während ich ein Wort eingebe, das „def“ enthält, und nicht daran interessiert bin, es zu erweitern.

  • Gibt es eine Möglichkeit, dies zu vermeiden oder diese Funktion zu diesem Zweck effektiver zu nutzen?
  • Ist eine andere Vim-Funktion dafür besser geeignet?

Nach einem kurzen Blick darauf SchnipselEmu, es scheint die beste Option zu sein und viel einfacher anzupassen, als ich zunächst dachte.

Um mit dem vorherigen Beispiel fortzufahren:

:Snippet def <{}>():

Sobald Sie es definiert haben, können Sie Ihr Snippet durch Eingabe erweitern def{TAB}.

War es hilfreich?

Lösung

SchnipselEmu ist ein nützliches Snippets-Plugin.

Andere Tipps

Snipmate – wie texmate :)http://www.vim.org/scripts/script.php?script_id=2540

Video:http://vimeo.com/3535418

snippet def 
     """ ${1:docstring} """
     def ${2:name}:
         return ${3:value}

Als weiterer Vorschlag (wenn auch etwas anders) die integrierte Funktionalität von vim zu verwenden:

:iabbrev def def(): #<LEFT><LEFT><LEFT><LEFT><LEFT>

Wenn Sie jetzt „def“ gefolgt von einem Leerzeichen oder einem anderen Nicht-Wort-Zeichen eingeben, wird es auf die gleiche Größe erweitert, die Sie als Ausgabe von SnippetsEmu angegeben haben (das Leerzeichen stammt von dem Leerzeichen, das Sie eingegeben haben, um die Vervollständigung auszulösen).

Dieser Ansatz weist nicht das „Lag“-Problem auf, das bei der Verwendung von :inoremap aufgetreten ist, und ist in vim integriert.Weitere Informationen zu dieser Funktion finden Sie unter :help abbrev.

Möglicherweise befürchten Sie, dass das Auslösen durch Leerzeichen und nicht durch Tabulator unnötigerweise ausgelöst wird, aber im Allgemeinen weiß vim ziemlich genau, wann es ausgelöst werden soll.Das Problem kann zusätzlich entschärft werden, indem die Abkürzung nur für bestimmte Dateitypen (z. B. Python) aktiviert wird:

au filetype python :iabbrev ... etc

Snip[ets] (Manager|Emu|Mate|.vim) ist natürlich auch eine perfekte Lösung, aber es ist schön, sich der Alternativen bewusst zu sein (insbesondere, wenn sie integriert sind).

Wenn SnippetsEmu für Ihre Anforderungen zu umfangreich oder ehrgeizig ist (das war es für mich), habe ich ein Plugin geschrieben, das Snippets basierend auf dem Dateityp verwaltet.Beim Auswählen des Snippets gibt es sogar eine Tab-Vervollständigung!:) :)

Holen Sie es sich hier: snippets.vim

Ich habe gerade installiert UltiSnips.Es gibt einen guten Artikel, der erklärt, warum Sie sich für UltiSnips entscheiden könnten: Warum UltiSnips?

Ich habe keines der anderen Snippet-Plugins verwendet;Ich beschloss, den Schritt zu wagen und mir ein Gerät zu zulegen, das voll ausgestattet zu sein schien und mir gerecht werden würde, wenn ich mehr Vim-Kenntnisse erwerbe und anspruchsvollere Dinge tun möchte.

Wie MDCore feststellte, SchnipselEmu ist ein beliebtes Vim-Skript, das genau das und noch mehr kann.Wenn Sie nur expandieren müssen (ohne die Einfügemarke nach hinten zu verschieben), können Sie den Standard verwenden :ab[breviate] Befehl.

:ab[breviate] [<expr>] {lhs} {rhs}
        add abbreviation for {lhs} to {rhs}.  If {lhs} already
        existed it is replaced with the new {rhs}.  {rhs} may
        contain spaces.
        See |:map-<expr>| for the optional <expr> argument.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top