Đầu ra vỏ lạ khi sử dụng IPython 5


37

Tôi vừa nâng cấp lên phiên bản mới nhất của IPython và bây giờ có gì đó không ổn khi sử dụng nó trong emacs.

Khi sử dụng nó trong một thiết bị đầu cuối thông thường, nó hoạt động tốt (màu sắc, hoàn thành tab, v.v.), tuy nhiên, trong M-x eshellhoặc M-x shellthay vì In [1]:đầu ra, nó thực sự xuất ra [?12l[?25hOut[1]xuất ra [J[?7h[?12l[?25h[?2004l[?7hOut[1]:.

Có thể đó là một số tính năng của thiết bị đầu cuối không khả dụng trên các emacs được sử dụng bởi IPython, nhưng tôi muốn biết đó là thiết bị nào.

Terminal.app:

In [1]: 2+2
Out[1]: 4

Emacs

[?12l[?25h2+2
[J[?7h[?12l[?25h[?2004l[?7hOut[1]: 4

Bạn đã mở một lỗi ngược dòng? Tôi không thể tìm thấy bất cứ điều gì, nhưng cũng hơi khó để tìm kiếm ATM với Gmane đang được làm lại.
rasmus

2
Để tham khảo, lỗi ngược dòng là # 25306
npostavs

Câu trả lời:


41

IPython 5 có giao diện đầu cuối mới, không tương thích với các vỏ kém hơn của Emacs. Để khắc phục, hãy thêm --simple-promptcờ vào lệnh IPython:

(setq python-shell-interpreter "ipython"
    python-shell-interpreter-args "--simple-prompt -i")

Từ tài liệu:

Giao diện mới không tương thích với tính năng 'kém hơn' của Emacs. Để tiếp tục sử dụng, hãy thêm --simple-promptcờ vào lệnh Emacs chạy. Cờ này vô hiệu hóa hầu hết các tính năng của IPython, dựa vào Emacs để cung cấp những thứ như hoàn thành tab.

Tham khảo: http://ipython.readthedocs.io/en/urdy/whatsnew/version5.html#id1


6
Vâng, đó là những gì tôi đã làm lúc đầu, tuy nhiên việc thiếu hỗ trợ đa dòng (quan trọng nhất đối với các định nghĩa hàm) đã khiến tôi trở lại ipython 4. Cần lưu ý rằng ipython 5 hoạt động tốt với thuật ngữ Mx.
Nghĩa đen

3
Đặt cờ này vẫn rất hữu ích với Elpy, mặc dù thông qua biến python-shell-interpreter-args. Nếu bạn chưa thử Elpy, bạn nên kiểm tra nó. Nó cho phép bạn viết các định nghĩa hàm của bạn trong một bộ đệm riêng và dễ dàng chuyển chúng đến trình thông dịch chỉ bằng một lệnh. Trong trường hợp này, bạn có thể sử dụng tất cả các lệnh chỉnh sửa của Emacs và có được phiên tương tác tốt nhất của cả hai thế giới.
Ricardo Lima

1
@Literal lý do tại sao cũng được viết trên liên kết: họ đã thay đổi từ sử dụng readlinesang prompt_toolkittrên IPython 5. prompt_toolkitkhông tương thích với shell Emacs, hoạt động khác với term: theo như tôi biết, shell chạy các thiết bị đầu cuối câm với mục đích hoạt động giống như một bộ đệm Emacs tiêu chuẩn, trong khi termchạy một trình giả lập thiết bị đầu cuối đầy đủ thực tế. Có vẻ như shell tương thích với readlinenhưng không phải với prompt_toolkit, điều này sẽ giải thích lời nhắc hiển thị các chuỗi thoát. Vì termchạy một thiết bị đầu cuối đầy đủ, nó diễn giải chính xác các chuỗi thoát.
Ricardo Lima

1
Tôi đã không chấp nhận vì tôi muốn giữ lại các tính năng khác, có lẽ sử dụng chế độ shell khác với nhiều tính năng hơn. Nhưng tôi đoán tôi sẽ phải sống với nó.
Nghĩa đen

1
@CodyChan Nó vô hiệu hóa các tính năng của IPython liên quan đến giao diện người dùng, như hoàn thành, màu sắc, v.v. Nó giữ các thứ như% lệnh ma thuật, lịch sử đầu vào / đầu ra, lệnh shell ,? Lệnh trợ giúp, v.v.
jpkotta

0

Có một cách để mở IPython trong vỏ emacs mà không cần sử dụng --simple-prompt

1. pip install rlipython

2. Open IPython in terminal

3. Run import rlipython; rlipython.install() 

Sau này, bạn sẽ có thể mở ipython trực tiếp trong vỏ emacs mà không gặp phải vấn đề hiển thị.

Có một vấn đề nữa trong trường hợp của tôi: Vì một số lý do, ngay cả sau khi hiển thị đã chính xác, tôi vẫn không thể sao chép trực tiếp-dán một số định nghĩa lớp nhiều dòng vào ipython trong vỏ emacs. Giải pháp hiện tại của tôi là sử dụng lệnh Ipython% paste. Nếu bạn có cách tiếp cận tốt hơn, xin vui lòng cho tôi biết.

PS: Tôi đang sử dụng Ubuntu 16.04. Ai đó sử dụng MacOS nói rằng nó phá vỡ IPython.



Nó làm hỏng cài đặt ipython
Diogo

theo cách nào nó hoạt động tốt với tôi
DataHungry

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.