2011-11-12 40 views
27

Trong ipython> = 0,11, lệnh% paste được yêu cầu để dán các lệnh thụt lề. Tuy nhiên, nếu tôi chạy một vỏ ipython trong một thiết bị đầu cuối từ xa, bộ đệm% dán đề cập đến là trên máy từ xa thay vì máy cục bộ. Có cách nào để khắc phục điều này?ipython:% dán qua kết nối ssh

+1

Tôi vừa mới nhớ có phép thuật '% cpaste'. Điều đó mang lại cho bạn không gian để dán vào, và bạn có thể chỉ cần thêm '--' trên một dòng để dừng và chạy mã bạn đã dán. –

+0

Vui lòng chuyển câu trả lời thành '% cpaste', đó là giải pháp tốt hơn. Cảm ơn –

Trả lời

45

Tôi nghĩ rằng đây chính xác là những gì %cpaste là dành cho (Tôi luôn quên tất cả những thứ mà IPython thực hiện). %cpaste nhập trạng thái cho phép bạn dán mã đã được định dạng hoặc thụt lề và nó sẽ bỏ dấu đầu dòng và lời nhắc, vì vậy bạn có thể sao chép/dán mã thụt lề từ tệp hoặc thậm chí từ phiên Python tương tác bao gồm >>> hoặc In [1] hàng đầu. .

+0

có lấy '% cpaste' từ bộ đệm cục bộ hoặc từ xa không? – keflavich

+1

địa phương (cho người dùng, không cho IPython). '% cpaste' nhập vào một chế độ ngăn chặn tất cả các công cụ tự động, vv, do đó việc dán mã thông thường sẽ hoạt động. Nó không kéo trực tiếp từ clipboard, như '% paste'. Vì vậy, nếu bạn làm '% cpaste'' ', thì bạn sẽ dán nội dung từ bộ đệm cục bộ của bạn. – minrk

4

Không phải là một giải pháp tuyệt vời, nhưng tôi nghĩ rằng điều này sẽ làm việc:

Sử dụng %autoindent để tắt autoindenting, gõ if True: và nhấn Enter. Sau đó dán mã thụt vào của bạn.

Tôi nghĩ rằng có thể viết phần mở rộng IPython để xử lý tốt hơn. Tôi sẽ cố gắng tìm kiếm nó. Tôi đã thực hiện an issue.

Nếu bạn sử dụng IPython rất nhiều, bạn có thể muốn cấu trúc kernel/client mới hoạt động - có thể tunnel các kết nối qua SSH, vì vậy bạn có thể sử dụng giao diện điều khiển Qt trên máy cục bộ, nhân trên máy chủ. Nhưng điều đó có thể mất một chút không quan trọng để có được tại chỗ.

+1

Lý do dán thường xuyên bị rối tung lên là nó về cơ bản mô phỏng gõ từng ký tự thông qua thiết bị đầu cuối. Nó là không thể phát hiện cho dù đây là đánh máy hoặc dán thực, do đó, IPython sẽ tự động một dòng, sau đó thụt đầu dòng dán của bạn đến sau đó. Điều này sẽ chỉ là thụt lề thêm nếu dán của bạn là hai dòng, nhưng nó sẽ thực sự là không chính xác trong hầu hết các trường hợp. – minrk

+0

Cảm ơn Thomas. Nó không hoàn toàn là một giải pháp, nhưng thừa nhận rằng đây là một lỗi (hoặc ít nhất có thể được nghĩ như vậy) là đủ. Bây giờ tôi sẽ gắn bó với cách giải quyết mà bạn cung cấp. – keflavich

Các vấn đề liên quan