Saya baru saja memutakhirkan ke versi terbaru dari IPython dan sekarang ada yang salah saat menggunakannya di emacs.
Ketika menggunakannya di terminal reguler, ia berfungsi dengan baik (warna, penyelesaian-tab, dll.), Namun baik dalam M-x eshell
atau M-x shell
, alih-alih In [1]:
menghasilkan, itu sebenarnya keluaran [?12l[?25h
dan Out[1]
keluaran [J[?7h[?12l[?25h[?2004l[?7hOut[1]:
.
Mungkin beberapa fitur terminal tidak tersedia pada emacs yang digunakan oleh IPython, tapi saya ingin tahu yang mana.
Terminal.app:
In [1]: 2+2
Out[1]: 4
Emacs
[?12l[?25h2+2
[J[?7h[?12l[?25h[?2004l[?7hOut[1]: 4
Jawaban:
IPython 5 memiliki antarmuka terminal baru, yang tidak kompatibel dengan shell inferior Emacs. Untuk memperbaikinya, tambahkan
--simple-prompt
bendera ke perintah IPython:Dari dokumentasi:
Referensi: http://ipython.readthedocs.io/en/stable/whatsnew/version5.html#id1
sumber
python-shell-interpreter-args
. Jika Anda belum mencoba Elpy, Anda harus memeriksanya. Ini memungkinkan Anda untuk menulis definisi fungsi Anda di buffer terpisah dan dengan mudah meneruskannya ke penerjemah hanya dengan satu perintah. Dalam hal ini, Anda dapat menggunakan semua perintah pengeditan Emacs dan mendapatkan sesi interaktif — yang terbaik dari kedua dunia.readline
menjadiprompt_toolkit
pada IPython 5.prompt_toolkit
tidak kompatibel dengan shell Emacs, yang bekerja secara berbeda dariterm
: sejauh yang saya tahu, shell menjalankan terminal bodoh dengan tujuan bekerja lebih seperti buffer Emacs standar, sedangkanterm
menjalankan emulator terminal penuh yang sebenarnya. Tampaknya cangkang kompatibel denganreadline
tetapi tidak denganprompt_toolkit
, yang akan menjelaskan prompt yang menunjukkan urutan pelarian. Karenaterm
menjalankan terminal penuh, itu benar menafsirkan urutan melarikan diri.Ada cara untuk membuka IPython di shell emacs tanpa menggunakan --simple-prompt
Setelah ini, Anda harus dapat membuka ipython langsung di shell emacs tanpa mengalami masalah tampilan.
Ada satu masalah lagi dalam kasus saya: Untuk beberapa alasan, bahkan setelah tampilan menjadi benar, saya masih tidak bisa secara langsung menyalin dan menempelkan beberapa definisi kelas multi-baris ke ipython di shell emacs. Solusi saya saat ini adalah dengan menggunakan perintah% paste Ipython. Jika Anda memiliki pendekatan yang lebih baik, beri tahu saya.
PS: Saya menggunakan Ubuntu 16.04. Seseorang yang menggunakan MacOS mengatakan itu merusak IPython.
sumber