153 votes

Faire fonctionner du code Python dans Vim

Je suis en train d'écrire du code Python en utilisant Vim, et à chaque fois que je veux exécuter mon code, je tape ceci à l'intérieur de Vim:

:w !python

Cela devient frustrant, donc je cherchais une méthode plus rapide pour exécuter du code Python à l'intérieur de Vim. Exécuter des scripts Python depuis un terminal peut-être? Je suis sous Linux.

218voto

Kent Points 71470

Que diriez-vous d'ajouter un autocmd à votre fichier ~/.vimrc, en créant une mapping :

autocmd FileType python map   :w:exec '!python3' shellescape(@%, 1)
autocmd FileType python imap   :w:exec '!python3' shellescape(@%, 1)

Ensuite, vous pourriez appuyer sur pour exécuter le buffer actuel avec python

Explication :

  • autocmd : commande que Vim exécutera automatiquement sur {évènement} (ici : si vous ouvrez un fichier python)
  • [i]map : crée un raccourci clavier vers en mode insertion/normal
  • : Si plusieurs buffers/fichiers sont ouverts : utilisez simplement celui qui est actif
  • : quitte le mode insertion
  • :w : enregistre votre fichier
  • ! : exécute la commande suivante dans votre shell (essayez :!ls)
  • % : est remplacé par le nom de fichier de votre buffer actif. Mais comme il peut contenir des espaces et d'autres "mauvaises" choses, il est préférable de ne pas écrire :python %, mais d'utiliser :
  • shellescape : échappe les caractères spéciaux. Le 1 signifie avec un backslash

TL;DR : La première ligne fonctionnera en mode normal et une fois que vous appuierez sur , elle enregistre d'abord votre fichier puis l'exécute avec python. La deuxième fait la même chose, mais quitte d'abord le mode insertion

70voto

fwuensche Points 923

Il suffit de passer en mode normal en appuyant sur et de taper :

! clear; python %

description de l'image

Explication pas à pas:

! vous permet d'exécuter une commande dans le terminal

clear va vider votre écran de terminal

; termine la première commande, vous permettant d'introduire une seconde commande

python exécutera votre script en utilisant python (il pourrait être remplacé par ruby par exemple)

% concatène le nom de fichier actuel, le passant en paramètre à la commande python

37voto

czayas Points 495

J'ai ceci dans mon fichier .vimrc :

imap  :w:!clear;python %

Lorsque j'ai terminé d'éditer un script Python, je presse simplement . Le script est sauvegardé puis exécuté dans un écran vierge.

16voto

michalmonday Points 151

S'appuyant sur les réponses précédentes, si vous aimez voir le code tout en regardant sa sortie, vous pourriez trouver la commande :ter (:terminal) utile.

autocmd Filetype python nnoremap   :w:ter python2 "%"
autocmd Filetype python nnoremap   :w:vert ter python3 "%"

Utiliser vert dans la deuxième ligne exécute le code en mode split vertical au lieu de horizontal.

L'inconvénient est que si vous ne fermez pas la fenêtre divisée où le code s'est exécuté, vous aurez de multiples divisions après plusieurs exécutions (ce qui n'arrive pas dans l'IDLE python original où la même fenêtre de sortie est réutilisée).

(Je garde ces lignes à l'intérieur de /home/user/.vimrc)

9voto

tinmarino Points 602

Plugin : jupyter-vim

Ainsi, vous pouvez envoyer des lignes (E), une sélection visuelle (e) à un jupyter-client en cours d'exécution (le remplacement d'ipython)

entrer la description de l'image ici

Je préfère séparer l'éditeur et l'interprète (chacun dans son propre shell). Imaginez que vous envoyiez une commande de lecture d'entrée incorrecte...

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