51 votes

Comment utiliser Python dans Vim ?

Je perds beaucoup de temps entre Vim et Python. Je trouve trop lent de copier-coller manuellement de Python à Vim et vice-versa. Un bon exemple de rupture est :

%!python for i in xrange(25) ; print 6*i \n

Comment faire de tels ajustements directement dans Vim ? [Résolu]

[Clarification] J'ai besoin de choses à Vim, comme l'impression de séquences, l'arithmétique... - des choses que je ne peux pas faire dans Vim.

[ ?] Quelqu'un peut-il développer ce point ? "votre script peut lire depuis stdin pour opérer directement sur les lignes données. (., %, ...). "

[Clarification supplémentaire]

Si je veux imprimer 'Hello' aux lignes 4, 5, 6 et 7, quel est le problème ?

:4-7!python -c "print 'hello'"

Le point . modifie la ligne en cours. Puis-je imprimer sur plusieurs lignes 7, 32 et 99 :

:7,32,99!python -c "print 'hello'"

Ne fonctionne manifestement pas. Comment ?

164voto

too much php Points 27983

Dans n'importe laquelle de vos fenêtres vim, tapez quelque chose comme ceci :

for x in range(1,10):
    print '-> %d' % x

Sélectionnez visuellement ces deux lignes (V pour démarrer le mode visuel), et tapez ce qui suit :

:!python

Comme vous avez appuyé sur ':' en mode visuel, cela ressemblera à ceci :

:'<,'>!python

Appuyez sur la touche Entrée et la sélection est remplacée par la sortie de la fonction print déclarations. Vous pourriez facilement en faire un mapping :

:vnoremap <f5> :!python<CR>

6voto

too much php Points 27983

Quelqu'un peut-il développer ce point : "votre script peut lire depuis stdin pour opérer directement sur les lignes données (., %, ...)."

Une utilisation courante consiste à trier les lignes de texte à l'aide de la commande "sort" disponible dans votre shell. Par exemple, vous pouvez trier tout le fichier à l'aide de cette commande :

:%!sort

Vous pouvez aussi trier quelques lignes en les sélectionnant en mode visuel, puis en les tapant :

:!sort

Vous pouvez trier les lignes 5-10 en utilisant cette commande :

:5,10!sort

Vous pourriez écrire votre propre script en ligne de commande (en supposant que vous sachiez le faire) qui inverse les lignes de texte. Cela fonctionne comme suit :

bash$ myreverse 'hello world!'
!dlrow olleh

Vous pourriez l'appliquer à l'un de vos fichiers ouverts dans vim, exactement de la même manière que vous avez utilisé sort :

:%!myreverse      <- all lines in your file are reversed

5voto

Greg Hewgill Points 356191

D'après votre exemple, il semble que vous vouliez exécuter un script Python et que la sortie du script apparaisse dans le tampon actuel de Vim. Si cela est correct, alors vous pouvez faire ce qui suit à la ligne de commande dans Vim :

%!python -c "for i in xrange(25): print 6*i"

El -c option pour python lui donne un script à exécuter. Cependant, cette technique ne vous sera utile que dans des cas très courts, car contrairement à certains autres langages, Python ne se prête pas bien à l'écriture de programmes complets sur une seule ligne.

2voto

Masi Points 22232

1voto

Martin Carpenter Points 4231

Je pense que tu as juste raté le -c drapeau. Par exemple :

:.!python -c "print 'hello'"

Il faut noter que le script que vous fournissez agit comme un filtre sur la sélection des lignes. C'est-à-dire que votre script peut lire de stdin d'opérer directement sur les lignes données ( . , % , ...). Au-delà des tâches les plus simples, cependant, vous feriez mieux de placer les commandes python dans un fichier script à part entière.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X