Ipython: ターミナルipythonおよびipythonコンソールで複数行入力を開始します

作成日 2012年10月15日  ·  14コメント  ·  ソース: ipython/ipython

qtconsolectrl-enter経由)およびノー​​トブック(セル内のenter経由)では、任意の1行入力を複数行入力に変換できます。 ターミナルとコンソールのエントリポイントにそのようなものを導入するとよいでしょう。

現在、潜在的な回避策は、入力の最初の行にif 1:を使用することです。これにより、すべてのクライアントで複数行の入力が開始されますが、これは少し厄介なようです。

一般に、可能であれば、異なるクライアント間で機能を同等にすることは理にかなっていると思います。

具体的な例:各行の最後でctrl-enterを押すと、qtconsoleを使用して次の入力を入力できます。

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

その行を実行してから、ターミナルベースのipythonクライアントを起動し、上矢印を押すと、適切なプロンプトが表示されます。

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

これは実行して実行できますが、ターミナルからそのような自由形式の複数行入力を入力する方法がないため、ワークフローが煩雑になります。

これを私の注意を引いてくれた@michaelpacerに感謝します。

最も参考になるコメント

ctrl+oを押すとうまくいきます(cmdおよびconemuコンソールで試してみました)。

(を使用することも可能

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

入力が終わったら、最初の行に戻って(を削除します。

全てのコメント14件

ここでは、ターミナル/リードラインの制約にぶつかると思います。 私の知る限り、ctrl-enterを検出する簡単な方法はありません。 raw_input()を呼び出すだけで、文字列が返されます。または、ユーザーがCtrl-DまたはCtrl-Cを押すと例外が発生します。

長期的なプロジェクトとして、readlineの代わりにpyreplのようなライブラリを使用することでこれを行うことができるかもしれません。 これは私たちがしばらくの間興味を持っていたものですが、誰もそれを綿密に調査することはできません。 別の方法は、cursesまたはurwidのような同様のツールを使用して新しいフロントエンドを構築することです。

実行できることの1つは、ctrl-v、ctrl-jを押して、入力を実行せずに改行を入力することです。 これは端末でも機能するため、Bash自体の一部だと思います(ctrl-vは次のホットキーを制御シーケンスとして扱うように指示し、ctrl-jは改行です)。 私はこれについてiTerm2をいじる機会がありませんでしたが、ctrl-enterをそのダブルシーケンスにマッピングすることはどういうわけか可能でしょうか?

編集:あなたは確かに少なくともiTerm2でこれを複製することができます。 グローバルショートカットキーに移動し、ctrl-enterを「Sendhexcodes」に設定してから0x160x0aに設定できます。

prompt_toolkitでこのタイプの機能を今すぐ入手できるでしょうか?

はい、Enterショートカットはありませんが、Enterで検出できるEnterの組み合わせはAlt-Enter (またはEsc, Enter )だけのようで、すでに強制実行に使用しています(つまり、改行を追加しないでください)。 ただし、別のショートカットを使用してこれを行うこともできます。または、カスタムショートカットを追加することもできます。

現在のIPythonでこれを行う方法の1つは、F2キーを押すと、エディターにドロップし、完了したらコンテンツを入力に入れることです。 $EDITOR環境変数を設定することにより、開くエディターを制御できます。

Alt-WindowsでEnterキーを押すと、ipythonウィンドウが全画面に変更されます。

最新のipythonとprompt_toolkitを使用し、 vi-modeを有効にしている場合は、コマンドを入力し、 ESCを押してから、 oを押します。 これにより、viと同様に、新しい行が作成されます。

このようにして、複数行のコマンドを使用できます。

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

Ref

  1. ipythonでViモードを有効にする: http ://koo.fi/blog/2016/08/04/enable-vi-editing-mode-in-ipython-5/

ちょうどこれに遭遇しました。 私はポジティブなctrl-enterを使用して新しい行を作成しています!?! しかし、この問題は私が間違っていることを示唆しています:(

もう1つのオプションは、セミコロンを行区切り文字として解釈することです。 例えば

%run slow_script.py; !display_notification.sh

Pythonスクリプトを実行してから、bashスクリプトを実行します。

編集:これは実際には機能しません、それは単なる提案です

私はそれを使用して行います;

cv2.imshow( 'image'、im);
cv2.waitKey(0);
cv2.destroyAllWindows()

ctrl+oを押すとうまくいきます(cmdおよびconemuコンソールで試してみました)。

(を使用することも可能

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

入力が終わったら、最初の行に戻って(を削除します。

私はそれを使用して行います;

cv2.imshow( 'image'、im);
cv2.waitKey(0);
cv2.destroyAllWindows()

この方法でPythonと魔法を組み合わせることができるようには見えません:

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

hi

ctrl + oを押すとうまくいきます(cmdおよびconemuコンソールで試してみました)。

私にとってalt+oです。

私にとってはctrl + oです

Ctrl + oはipythonで機能しますが、$# jupyter consoleでは機能しません。

Ctrl + Oは機能します、この問題は閉じることができます

このページは役に立ちましたか?
0 / 5 - 0 評価