2008-08-18 5 views
27

J'ai récemment commencé à utiliser Vim comme éditeur de texte et je travaille actuellement sur mes propres personnalisations.Comment créer des extraits courts dans Vim?

Je suppose que les mappages de claviers peuvent faire à peu près n'importe quoi, mais pour l'instant je les utilise comme une sorte de fragment de code presque exclusivement.

Ainsi, par exemple, si je tape def{TAB} (:imap def{TAB} def():<ESC>3ha), il étend à:

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

Cela fonctionne comme prévu, mais je trouve ennuyeux quand Vim attend une commande complète alors que je tape un mot contenant "def" et je ne suis pas intéressé à l'élargir. Y at-il un moyen d'éviter cela ou d'utiliser cette fonction plus efficacement à cette fin?

  • Y a-t-il d'autres fonctionnalités Vim mieux adaptées?

Après avoir pris un coup d'œil à SnippetsEmu, on dirait qu'il est la meilleure option et beaucoup plus facile à personnaliser que je pensais d'abord.

Pour continuer avec l'exemple précédent:

:Snippet def <{}>(): 

Une fois défini, vous pouvez étendre votre extrait en tapant def{TAB}.

+0

Peut-être que les macros seraient mieux adaptées aux extraits courts? –

Répondre

5

SnippetsEmu est un plugin de snippets utile.

+2

Votre réponse à un lien seulement m'envoie à quelque chose à propos de CouchDB. C'est pourquoi les réponses de lien seulement sont terribles. Certes, vous avez au moins formulé le lien afin que je puisse au moins effectuer une recherche sur Google. Vous devriez changer votre lien vers le lien officiel, comme le PO/question a. – James

4

Comme noté par MDCore, SnippetsEmu est un script Vim populaire qui fait juste cela et plus encore. Si vous avez seulement besoin de développer (sans reculer le curseur), vous pouvez utiliser la commande standard :ab[breviate].

: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. 
6

Si snippetsEmu est trop lourd ou ambitieux pour ce dont vous avez besoin (il était pour moi), j'ai écrit un plugin qui gère des extraits en fonction de filetype. Il a même terminé l'onglet lors de la sélection de l'extrait! :)

Recevez votre article ici: snippets.vim

34

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

vidéo: http://vimeo.com/3535418

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

Freaking génial !!!! Grand script voyeg3r. Exactement ce que je cherchais. – Daniel

+1

XPTemplate et UltiSnips sont une amélioration par rapport à snipMate – user1825480

+1

Snipmate a une fourchette mise à jour à https://github.com/garbas/vim-snipmate et utilise un repo de snippets à https://github.com/honza/snipmate-snippets – caspyin

5

Je viens d'installer UltiSnips. Il y a un bon article qui explique pourquoi vous pouvez choisir UltiSnips: Why UltiSnips?

Je n'ai utilisé aucun des autres greffons d'extraits; J'ai décidé de franchir le pas avec un qui semblait complet et serait capable de m'accueillir comme je gagne plus de compétences Vim et que je veux faire des choses plus sophistiquées.

+0

J'ai essayé à la fois Snipmate et UltiSnips et sans aucun doute UltiSnips est de loin meilleur, car il est plus simple de faire des changements et de créer des snippets. – SergioAraujo

7

Comme une autre suggestion (bien que légèrement différent) à l'aide de vim fonctionnalité intégrée:

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

Maintenant, chaque fois que vous tapez def suivi d'un espace ou un autre caractère non-mot, il se dilatent à la même chose que ce que vous est donné comme la sortie de SnippetsEmu (l'espace vient de l'espace que vous avez entré pour déclencher l'achèvement).

Cette approche ne subit pas le problème "lag" que vous avez rencontré en utilisant: inoremap, et est intégré dans vim. Pour plus d'informations sur cette fonctionnalité, consultez :help abbrev.

Vous pouvez craindre d'être déclenché par un espace non tabulé, il se déclenchera inutilement, mais en général vim est assez intelligent sur le moment de le déclencher. Le problème peut être atténué en outre en permettant l'abréviation que pour certains types de fichiers (par exemple, python):

au filetype python :iabbrev ... etc 

Snip [STCE] (directeur | Emu | Maté | .vim) est bien sûr aussi une solution parfaite , mais c'est bien d'être conscient des alternatives (surtout quand elles sont intégrées).

Questions connexes