Ipython: بدء إدخال متعدد الأسطر في وحدة تحكم ipython و ipython الطرفية

تم إنشاؤها على ١٥ أكتوبر ٢٠١٢  ·  14تعليقات  ·  مصدر: ipython/ipython

في qtconsole (عبر ctrl-enter ) ، وفي دفتر الملاحظات (عبر enter فقط داخل الخلية) ، يمكنك تحويل أي إدخال سطر واحد إلى إدخال متعدد الأسطر. سيكون من الجيد الحصول على شيء من هذا القبيل يذهب إلى نقاط الدخول الطرفية ووحدة التحكم.

حاليًا ، هناك حل بديل محتمل يتمثل في استخدام if 1: للسطر الأول من الإدخال ، والذي يبدأ بعد ذلك الإدخال متعدد الأسطر في جميع العملاء ، ولكن هذا يبدو محرجًا بعض الشيء.

بشكل عام ، حيثما أمكن ، أعتقد أنه من المنطقي أن يكون هناك تكافؤ في الميزات بين العملاء المختلفين.

مثال ملموس: يمكنني إدخال الإدخال التالي باستخدام qtconsole بالضغط على ctrl-enter في نهاية كل سطر:

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 كومينتر

أعتقد أننا واجهنا قيود Terminal / readline هنا. على حد علمي ، لا توجد طريقة سهلة لاكتشاف ctrl-enter. نقوم فقط باستدعاء raw_input() وإرجاع سلسلة - أو ظهور استثناء إذا ضغط المستخدم على Ctrl-D أو Ctrl-C.

كمشروع طويل المدى ، قد يكون من الممكن القيام بذلك باستخدام مكتبة مثل pyrepl بدلاً من readline. هذا شيء كنا مهتمين به لفترة من الوقت ، لكن لا أحد لديه القدرة على التحقيق فيه عن كثب. هناك طريقة أخرى تتمثل في بناء واجهة جديدة باستخدام الشتائم أو أداة مشابهة مثل urwid.

شيء واحد يمكنك القيام به هو الضغط على ctrl-v ، ctrl-j لإدخال سطر جديد دون تشغيل الإدخال. أعتقد أن هذا جزء من Bash نفسه لأنه يعمل أيضًا على المحطة (يقول ctrl-v للتعامل مع مفتاح الاختصار التالي كتسلسل تحكم و ctrl-j هو سطر جديد). لم تتح لي الفرصة للعبث مع iTerm2 بشأن هذا ، ولكن ربما من الممكن تعيين ctrl-enter لهذا التسلسل المزدوج بطريقة ما؟

تحرير: يمكنك بالفعل تكرار هذا في iTerm2 على الأقل. يمكنك الانتقال إلى مفاتيح الاختصار العمومية وتعيين ctrl-enter على "إرسال الرموز السداسية" ثم: 0x16 0x0a

هل من الممكن الحصول على هذا النوع من الوظائف الآن بـ prompt_toolkit ؟

نعم ، على الرغم من عدم وجود اختصار إدخال - يبدو أن التحرير والسرد الوحيد مع الإدخال الذي يمكننا اكتشافه باستخدام الإدخال هو Alt-Enter (أو Esc, Enter ) ، ونحن نستخدم ذلك بالفعل لتنفيذ القوة (على سبيل المثال لا تضيف سطرًا جديدًا). يمكننا القيام بذلك باختصار آخر - أو يمكنك إضافة اختصار مخصص .

إحدى الطرق التي يمكنك من خلالها القيام بذلك في IPython الحالي هي الضغط على F2 ، والذي سينقلك إلى محرر ، ويضع المحتويات في مدخلاتك عند الانتهاء. يمكنك التحكم في المحرر الذي يفتحه عن طريق تعيين متغير البيئة $EDITOR .

يقوم Alt-Enter في Windows بتغيير نوافذ ipython إلى ملء الشاشة.

باستخدام الإصدارين الأحدث من ipython و الفوري ، وإذا كان لديك vi-mode ممكّنًا ، يمكنك كتابة الأمر الخاص بك ، ثم الضغط ESC ، ثم الضغط o . سيؤدي هذا إلى إنشاء سطر جديد ، تمامًا كما في vi.

بهذه الطريقة يمكنك الحصول على أوامر متعددة الأسطر.

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

المرجع

  1. تمكين وضع Vi في ipython: http://koo.fi/blog/2016/08/04/enable-vi-editing-mode-in-ipython-5/

فقط ركض في هذا. أنا إيجابي باستخدام ctrl-enter لإنشاء سطر جديد!؟! لكن هذه المشكلة توحي بأنني مخطئ :(

خيار آخر هو تفسير الفاصلة المنقوطة كفاصل أسطر. على سبيل المثال

%run slow_script.py; !display_notification.sh

سيقوم بتشغيل نصي بيثون الخاص بي ، ثم تنفيذ بعض نصوص bash.

تحرير : هذا لا يعمل في الواقع ، إنه مجرد اقتراح

أنا أفعل ذلك باستخدام ؛

cv2.imshow ("صورة" ، 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 ("صورة" ، im) ؛
cv2.waitKey (0) ،
cv2.destroyAllWindows ()

لا يبدو أنه يمكنك مزج بيثون مع السحر بهذه الطريقة:

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 التقييمات