2010-11-24 9 views
25

Lorsque j'écris des documents, je me retrouve dans une convention d'organisation appropriée à ce document, et j'aimerais que vim mette en évidence cette convention. Mais faire un ftplugin est trop "global", je veux que la coloration de la syntaxe vienne avec le document, donc si je l'envoie quelque part sans ce plugin ils peuvent toujours obtenir la coloration. J'ai trouvé que vous ne pouvez pas le faire à travers le modeline parce que cela n'accepte que des options.Vim: Comment exécuter le texte sélectionné en tant que commandes vim?

En ce moment j'essaie de trouver s'il y a un moyen de sélectionner du texte en mode visuel (ou autre chose, mais j'utilise le mode ligne visuelle pour tout ce qui serait bien) et l'exécuter comme une série de commandes vim.

Par exemple, au bas d'un document que j'ai:

vim highlighting: 
    syn match Comment "^>.*$" 

Comment puis-je sélectionner le texte et dire « boom, l'exécuter » plutôt que d'avoir à retaper?

+0

Grande question - J'ai toujours souhaité que vous puissiez activer des modèles étendus pour diverses choses telles que des appariements personnalisés ou des choses similaires. Utilisé pour écrire des ftplugins temporaires pour cela. – progo

Répondre

37

Vous pouvez sélectionner les lignes, Yank la sélection et l'exécuter avec

:@" 
+1

Voir également [http://stackoverflow.com/questions/3997078/how-do-yous-paste-text-into-a-vim-colon-command/3997110#3997110] (cette réponse) pour plus d'informations sur la façon de utiliser les registres – Benoit

+3

Cela fonctionne avec n'importe quel registre, soit dit en passant. Vous pouvez faire un "ayy" pour placer votre ligne entière à un, puis utiliser '@ a' pour l'exécuter Notez que vous allez obtenir un tas d'espaces si vous exécutez une ligne en retrait, ce qui pourrait gâcher les choses (il va vous déplacer en mode normal.) Peut-être mieux de sélectionner la commande avec le mode visuel 'v' – naught101

+2

J'ai' nnoremap 2: @ "" et je l'utilise beaucoup. (mnémonique est Shift-2 = @ = Exécuter.) –

1

J'ai défini a few mappings basé sur lh-vim-lib qui ne comportent pas de registre. Il s'agit en effet d'une solution overkill, mais très soignée pour les mappings car elle ne modifiera jamais le registre par défaut.

2

J'aime faire ce mapping qui vous obligera faire une sélection visuelle d'abord et ne remplace pas votre registre sans nom:

vmap <space> "xy:@x<CR> 

Si vous aimez écrire vim commandes avec Césure:

vmap <space> :w! /tmp/x.vim<CR>:so /tmp/x.vim<CR> 
Questions connexes