2011-11-12 20 views
27

En ipython> = 0.11, se requiere el comando% paste para pegar comandos con sangría. Sin embargo, si ejecuto un shell ipython en un terminal remoto, el buffer% paste se refiere a está en el equipo remoto en lugar de en el equipo local. ¿Hay alguna forma de evitar esto?ipython:% pegar por la conexión ssh

+1

Acabo de recordar que también existe la magia '% cpaste'. Eso le da espacio para pegar, y simplemente puede agregar '--' en una línea para detener y ejecutar el código que ha pegado. –

+0

Por favor, cambie la respuesta a '% cpaste', esa es la mejor solución. Gracias –

Respuesta

45

Creo que esto es exactamente para lo que %cpaste es (siempre me olvido de todas las cosas que hace IPython). %cpaste ingresa un estado que le permite pegar el código ya formateado o sangrado, y quitará la sangría y las indicaciones iniciales, para que pueda copiar y pegar el código sangrado de los archivos, o incluso de una sesión interactiva de Python que incluya >>> o In [1] que se quitarán .

+0

¿la extracción '% cpaste' del buffer local o remoto? – keflavich

+1

local (para el usuario, no para IPython). '% cpaste' entra en un modo que impide todo el autoinductor, etc. cosas, por lo que el pegado normal del código funcionará. No tira directamente del portapapeles, como '% paste'. Entonces, si haces '% cpaste'' ', estarás pegando el contenido de tu buffer local. – minrk

4
No

una solución brillante, pero creo que esto va a funcionar:

Uso %autoindent para apagar autoindenting, tipo if True: y pulse enter. Luego pegue su código sangrado.

Creo que debería ser posible escribir una extensión IPython para manejar esto mejor. Trataré de mirarlo. He hecho an issue.

Si usa mucho IPython, es posible que desee obtener el funcionamiento de la nueva arquitectura kernel/client: debería ser posible tunelizar las conexiones a través de SSH, para poder usar la consola Qt en su máquina local, hablando con un kernel en un servidor. Pero eso puede tomar un poco de toquetear para ponerse en marcha.

+1

La razón por la cual el empastado regular se arruina es que esencialmente simula tipear cada carácter a través de la terminal. Es imposible detectar si esto es tipado o pegado real, por lo que IPython autoindentará una línea, luego su sangrado pegado entra después de eso. Esto solo será sangría adicional si su pegado es de dos líneas, pero en realidad será incorrecto en la mayoría de los casos. – minrk

+0

Gracias Thomas. No es una solución, pero es suficiente el reconocimiento de que se trata de un error (o al menos puede considerarse como tal). Por ahora, me quedaré con la solución que me proporcionó. – keflavich

Cuestiones relacionadas