2011-11-12 5 views
27

Dans ipython> = 0.11, la commande% paste est requise pour coller les commandes indentées. Cependant, si je lance un shell ipython dans un terminal distant, le tampon% paste fait référence à la machine distante plutôt qu'à la machine locale. Y at-il un moyen de contourner cela?ipython:% coller sur la connexion ssh

+1

Je viens de me rappeler qu'il y a aussi la magie '% cpaste'. Cela vous donne un espace pour coller, et vous pouvez simplement ajouter '--' sur une ligne pour arrêter et exécuter le code que vous avez collé. –

+0

Veuillez changer la réponse à '% cpaste', c'est la meilleure solution. Merci –

Répondre

45

Je pense que c'est exactement ce que %cpaste est pour (je oublie toujours toutes les choses qu'IPython fait). %cpaste entre dans un état vous permettant de coller du code déjà formaté ou indenté, et dépouillera l'indentation et les invites, de sorte que vous pouvez copier/coller le code indenté des fichiers, ou même d'une session Python interactive incluant >>> ou In [1] qui seront supprimés .

+0

est-ce que% cpaste tire du tampon local ou distant? – keflavich

+1

local (à l'utilisateur, pas à IPython). '% cpaste' entre dans un mode qui empêche tout le truc automatique, etc., de sorte que le collage régulier du code fonctionne. Il ne tire pas directement du presse-papiers, comme '% paste'. Donc, si vous faites '% cpaste'' ', alors vous allez coller le contenu de votre tampon local. – minrk

4

Pas une solution brillante, mais je pense que cela va fonctionner:

Utilisez %autoindent pour désactiver auto-indentation, le type if True: et appuyez sur Entrée. Puis collez votre code en retrait.

Je pense qu'il devrait être possible d'écrire une extension IPython pour gérer cela mieux. Je vais essayer de tourner autour de ça. J'ai fait an issue. Si vous utilisez beaucoup IPython, vous voudrez peut-être faire fonctionner la nouvelle architecture noyau/client - il devrait être possible de tunnelliser les connexions sur SSH, de sorte que vous puissiez utiliser la console Qt sur votre machine locale, en parlant à un noyau sur un serveur. Mais cela pourrait prendre un peu de violon pour se mettre en place.

+1

La raison pour laquelle le collage régulier est foiré est qu'il simule essentiellement chaque caractère à travers le terminal. Il est impossible de détecter s'il s'agit réellement d'un typage ou d'un collage, donc IPython va autoindenter une ligne, puis votre indentation collée vient après. Ce sera juste une indentation supplémentaire si votre pâte est deux lignes, mais elle sera en fait incorrecte dans la plupart des cas. – minrk

+0

Merci Thomas. Ce n'est pas tout à fait une solution, mais la reconnaissance qu'il s'agit d'un bug (ou du moins peut être considéré comme tel) est suffisante. Pour l'instant je m'en tiendrai à la solution de contournement que vous avez fournie. – keflavich