ขณะนี้อยู่ใน Bash ฉันใช้set -o vi
เพื่อเปิดใช้งานโหมด vi ใน bash prompt ของฉัน
ฉันจะทำสิ่งนี้ใน ipython ได้อย่างไร
หมายเหตุ:หากคำตอบใช้ได้กับ * nix ทั้งหมดฉันจะลบ OS X ออกจากชื่อเรื่อง :)
ขณะนี้อยู่ใน Bash ฉันใช้set -o vi
เพื่อเปิดใช้งานโหมด vi ใน bash prompt ของฉัน
ฉันจะทำสิ่งนี้ใน ipython ได้อย่างไร
หมายเหตุ:หากคำตอบใช้ได้กับ * nix ทั้งหมดฉันจะลบ OS X ออกจากชื่อเรื่อง :)
คำตอบ:
ในกรณีที่มีคนหลงเข้ามาที่นี่เมื่อเร็ว ๆ นี้IPython 5.0 ได้เปลี่ยนจาก readline เป็น prompt_toolkitดังนั้นคำตอบที่อัปเดตสำหรับคำถามนี้คือการส่งตัวเลือก:
$ ipython --TerminalInteractiveShell.editing_mode=vi
... หรือตั้งค่าทั่วโลกในการกำหนดค่าโปรไฟล์ ( ~/.ipython/profile_default/ipython_config.py
สร้างด้วยipython profile create
ถ้าคุณไม่มี) ด้วย:
c.TerminalInteractiveShell.editing_mode = 'vi'
ดูเหมือนว่าโซลูชันจะใช้ได้กับแอพที่เข้ากันได้กับ Readline อื่น ๆ อีกมากมาย:
ตั้งค่าสิ่งต่อไปนี้ใน~/.inputrc
ไฟล์ของคุณ:
set editing-mode vi
set keymap vi
set convert-meta on
set convert-meta on
ระวังด้วย มันขัดแย้งกับรายการ Unicode ดังนั้นหากคุณวางหรือพิมพ์ Unicode คุณสามารถทริกเกอร์เหตุการณ์ต่างๆได้ซึ่งอาจน่าแปลกใจ ตัวอย่างเช่นลองพิมพ์üแล้วคุณจะเห็นผลลัพธ์ที่น่าสนใจ
set keymap vi
การเปลี่ยนแปลงที่ keymap (โหมด IE) ดังต่อไปนี้คำสั่งจะมีผลต่อและเปลี่ยนแปลงวิธีการบางปุ่มประพฤติset convert-meta on
ฉันไม่แน่ใจว่าคุณต้องการหรือเปล่า
set convert-meta on
(และสิ่งที่อยู่ใต้บรรทัดนั้น) จะใช้กับโหมดคำสั่งเท่านั้นไม่ใช่โหมดแทรก
คุณยังสามารถสลับแบบโต้ตอบระหว่างโหมด Vi-mode และโหมด Emacs ตามเอกสาร readlineเพื่อสลับไปมาคุณควรจะสามารถใช้คีย์ผสม MCj ได้ แต่ดูเหมือนว่าจะอนุญาตให้ฉันเปลี่ยนเป็นโหมด vi เท่านั้น - บน Mac ของฉัน (โดยที่ ESC ใช้เป็นคีย์ 'Meta' ) ESCคือ: CTRL+ j+ เพื่อสลับกลับไป Emacs โหมดหนึ่งสามารถใช้ Ce แต่ที่ไม่ปรากฏในการทำงานสำหรับฉัน - ฉันจะต้องทำแทน MCE - บน Mac ของฉันมันเป็น: ESC+ +CTRLe
FYI my ~ / .inputrc ถูกตั้งค่าดังนี้:
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
ipython
ใช้ไลบรารี readline และสามารถกำหนดค่าได้โดยใช้~/.inputrc
ไฟล์ คุณสามารถเพิ่ม
set editing-mode vi
ไปยังไฟล์นั้นเพื่อให้readline
แอปพลิเคชันที่ใช้ทั้งหมดใช้การเชื่อมโยงคีย์สไตล์ vi แทน Emacs
ipython
เปลี่ยนจากreadline
ไลบรารี python ที่เรียกprompt_toolkit
เข้า5.0.0
ดังนั้นจึงไม่สามารถใช้งานได้อีกต่อไป
ฉันต้องการที่จะสามารถสลับโหมดโต้ตอบใน IPython 5 และฉันพบว่าคุณสามารถทำได้โดยการสร้างตัวจัดการพร้อมต์ใหม่ทันที:
a = get_ipython().configurables[0]; a.editing_mode='vi'; a.init_prompt_toolkit_cli()
คุณสามารถตั้งค่า vi ในไฟล์กำหนดค่าเริ่มต้น. ipython ของคุณ สร้างไฟล์ถ้าคุณไม่มีโดยเพิ่มไฟล์ที่~/.ipython/profile_default/startup/
เรียกว่าstart.py
. นี่คือตัวอย่าง:
# Initializing script for ipython in ~/.ipython/profile_default/startup/
from IPython import get_ipython
ipython = get_ipython()
# If in ipython, set vi and load autoreload extension
if 'ipython' in globals():
ipython.editing_mode = 'vi'
ipython.magic('load_ext autoreload')
ipython.magic('autoreload 2')
from Myapp.models import *
บรรทัดสุดท้ายคือถ้าคุณใช้ ipython กับ Django และต้องการนำเข้าโมเดลทั้งหมดของคุณตามค่าเริ่มต้น