Ipython: memulai input multiline di terminal ipython dan ipython console

Dibuat pada 15 Okt 2012  ·  14Komentar  ·  Sumber: ipython/ipython

Di qtconsole (melalui ctrl-enter ), dan di buku catatan (hanya melalui enter di dalam sel), Anda dapat mengubah input satu baris menjadi input multibaris. Akan menyenangkan untuk mendapatkan sesuatu seperti itu untuk terminal dan titik masuk konsol.

Saat ini, solusi potensial adalah menggunakan dan if 1: untuk input baris pertama, yang kemudian memulai input multiline di semua klien, tetapi itu tampaknya agak canggung.

Secara umum, jika memungkinkan, menurut saya masuk akal untuk memiliki paritas fitur di seluruh klien yang berbeda.

Contoh konkret: Saya dapat memasukkan input berikut menggunakan qtconsole dengan menekan ctrl-enter di akhir setiap baris:

In [2]: print "hello"
   ...: print "this is all one input"
   ...: print "same here..."
   ...: 

dan jika saya menjalankan baris itu, dan kemudian memulai klien ipython berbasis terminal dan tekan panah atas, saya akan melihat Prompt yang sesuai:

In [1]: print "hello"
print "this is all one input"
print "same here..."

yang dapat dieksekusi dan dijalankan, tetapi tidak ada cara untuk memasukkan input multibaris bentuk bebas seperti itu dari terminal, yang membuat alur kerja menjadi canggung.

terima kasih kepada @michaelpacer karena telah menyampaikan ini kepada saya.

Komentar yang paling membantu

Menekan ctrl+o berfungsi untuk saya (mencoba di konsol cmd dan conemu).

Juga dimungkinkan untuk menggunakan (

 In [84]: (
     ...: fig, ax = plt.subplots(1,2)
     ...: ax[0].plot([1,2,3])
     ...: ax[1].plot([3,2,1])
     ...: fig.show()
     ...:

Setelah selesai mengetik, cukup kembali ke baris pertama dan hapus ( .

Semua 14 komentar

Saya pikir kami menghadapi kendala terminal/readline di sini. Sejauh yang saya tahu, tidak ada cara mudah untuk mendeteksi ctrl-enter. Kami hanya memanggil raw_input() dan mengembalikan string - atau pengecualian muncul jika pengguna menekan Ctrl-D atau Ctrl-C.

Sebagai proyek jangka panjang, dimungkinkan untuk melakukan ini dengan menggunakan perpustakaan seperti pyrepl alih-alih readline. Ini adalah sesuatu yang kami minati untuk sementara waktu, tetapi tidak ada yang bisa menyelidikinya dengan cermat. Cara lain adalah dengan membangun frontend baru menggunakan kutukan atau alat serupa seperti urwid.

Satu hal yang dapat Anda lakukan adalah menekan ctrl-v, ctrl-j untuk memasukkan baris baru tanpa menjalankan input. Saya pikir ini adalah bagian dari Bash itu sendiri karena ini juga berfungsi di terminal (ctrl-v mengatakan untuk memperlakukan hotkey berikutnya sebagai urutan kontrol dan ctrl-j adalah baris baru). Saya belum memiliki kesempatan untuk mengacaukan iTerm2 dalam hal ini, tetapi mungkin entah bagaimana memetakan ctrl-enter ke urutan ganda itu?

Sunting: Anda memang dapat mereplikasi ini setidaknya di iTerm2. Dapat pergi ke tombol pintas global Anda dan mengatur ctrl-enter ke "Kirim kode hex" dan kemudian: 0x16 0x0a

Apakah mungkin untuk mendapatkan fungsionalitas jenis ini sekarang dengan prompt_toolkit ?

Ya, meskipun tidak dengan pintasan enter - tampaknya satu-satunya kombo dengan enter yang dapat kami deteksi dengan enter adalah Alt-Enter (atau Esc, Enter ), dan kami sudah menggunakannya untuk eksekusi paksa (mis. jangan tambahkan baris baru). Namun, kami dapat melakukan ini dengan pintasan lain - atau Anda dapat menambahkan pintasan khusus .

Salah satu cara Anda dapat melakukan ini di IPython saat ini adalah dengan menekan F2, yang akan memasukkan Anda ke dalam editor, dan memasukkan konten ke dalam input Anda setelah selesai. Anda dapat mengontrol editor apa yang dibuka dengan menyetel variabel lingkungan $EDITOR .

Alt-Enter pada Windows mengubah ipython windows menjadi layar penuh.

Menggunakan ipython dan prompt_toolkit terbaru, dan jika Anda mengaktifkan vi-mode , Anda dapat mengetikkan perintah Anda, lalu tekan ESC , lalu tekan o . Ini akan membuat baris baru, seperti di vi.

Dengan cara ini Anda dapat memiliki perintah multiline.

In [29] : %reset -s #----> press `ESC` then `o`
            %run foo.py

ref

  1. Mengaktifkan mode Vi di ipython: http://koo.fi/blog/2016/08/04/enable-vi-editing-mode-in-ipython-5/

Baru saja mengalami ini. Saya yakin ctrl-enter digunakan untuk membuat baris baru!?! Tapi masalah ini akan menyarankan saya salah :(

Pilihan lain adalah menafsirkan titik koma sebagai pemisah garis. misalnya

%run slow_script.py; !display_notification.sh

akan menjalankan skrip python saya, lalu jalankan beberapa skrip bash.

Sunting : ini sebenarnya tidak berfungsi, itu hanya saran

Saya melakukannya menggunakan ;

cv2.imshow('gambar', im);
cv2.waitKey(0) ;
cv2.destroySemuaWindows()

Menekan ctrl+o berfungsi untuk saya (mencoba di konsol cmd dan conemu).

Juga dimungkinkan untuk menggunakan (

 In [84]: (
     ...: fig, ax = plt.subplots(1,2)
     ...: ax[0].plot([1,2,3])
     ...: ax[1].plot([3,2,1])
     ...: fig.show()
     ...:

Setelah selesai mengetik, cukup kembali ke baris pertama dan hapus ( .

Saya melakukannya menggunakan ;

cv2.imshow('gambar', im);
cv2.waitKey(0) ;
cv2.destroySemuaWindows()

Sepertinya Anda tidak bisa mencampur python dan sihir dengan cara ini:

In [5]: %run test.py ;\
   ...: !echo foo

hi

Menekan ctrl+o berfungsi untuk saya (mencoba di konsol cmd dan conemu).

Bagi saya itu alt+o .

Bagi saya itu ctrl + o

Ctrl+o berfungsi untuk saya di ipython , tetapi tidak jupyter console .

Ctrl+O berfungsi, masalah ini dapat ditutup

Apakah halaman ini membantu?
0 / 5 - 0 peringkat