Як мені використовувати клавіші vi в ipython під * nix?


95

В даний час в Bash я використовую set -o viдля ввімкнення режиму vi в моєму запиті bash.

Як це зробити в ipython?

Примітка: Якщо відповідь стосується всіх * nix, я видалю OS X із заголовка :)

Відповіді:


166

Якщо хтось недавно блукав сюди, IPython 5.0 перейшов з рядка читання на prompt_toolkit , тому оновленою відповіддю на це питання є передача опції:

$ ipython --TerminalInteractiveShell.editing_mode=vi

... або встановити його глобально в конфігурації профілю ( ~/.ipython/profile_default/ipython_config.py; створити його за допомогою, ipython profile createякщо у вас його немає) за допомогою:

c.TerminalInteractiveShell.editing_mode = 'vi'

4
Я прийшов сюди, щоб опублікувати цю відповідь - дякую, що побили мене :)
Джейсон Сундрам

2
Дякую. Це дратує важко знайти де-небудь у документах для IPython, Jupyter або prompt_toolkit.
п - й

2
Де я можу додати свої власні зіставлення ключів?
Aravinda

Моя відповідь на це запитання показує один із способів додати спеціальні прив’язки клавіш.
jellycola

2
Чи є спосіб відстежувати, чи перебуваю я в звичайному режимі чи режимі вставки?
Peeyush Kushwaha,

32

Схоже, рішення працює для багатьох інших програм, сумісних із readline:

Встановіть у своєму ~/.inputrcфайлі наступне :

set editing-mode vi
set keymap vi
set convert-meta on

Джерело: http://www.jukie.net/bart/blog/20040326082602


7
Будьте дуже обережні set convert-meta on. Це конфліктує із входом Unicode, тому, якщо ви вставите або наберете Unicode, ви можете активувати різні події, що може бути несподіваним. Наприклад, спробуйте набрати ü, і ви побачите цікавий результат.
minrk

4
Чи знаєте ви, що роблять останні два рядки? Швидка перевірка показує, що лише перший рядок містить основні прив’язки клавіш vi - хоч би я знав, чи є причина додавати інші.
weronika


@weronika Отже, set convert-meta on(і будь-що нижче цього рядка) застосовуватиметься лише до командного режиму, а не до режиму вставки.
s4y

6
Примітка: Це більше не працює з IPython 5.0.0. Дивіться відповідь @ imiric нижче.
Джейсон Сундрам,

11

Ви також можете інтерактивно перемикатися між режимами Vi та Emacs. Згідно з документами readline для перемикання між ними, передбачається, що ви зможете використовувати комбінацію клавіш MCj, але це, мабуть, дозволяє мені переключитися у режим vi - на моєму Mac (де ESC використовується як клавіша 'Meta') ) це: ESC+ CTRL+ j. Щоб повернутися до режиму Emacs, можна використовувати Ce, але це, здається, не спрацювало для мене - натомість мені довелося зробити MCe - на моєму Mac це: ESC+ CTRL+ e.

FYI my ~ / .inputrc налаштовано таким чином:

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on

Я намагався зрозуміти, чому MCj не працював увесь цей час!
shangxiao

9

ipythonвикористовує бібліотеку readline, і це можна налаштувати за допомогою ~/.inputrcфайлу. Ви можете додати

set editing-mode vi

до цього файлу, щоб усі readlineосновні програми використовували сполучення клавіш vi замість Emacs.


9
ipythonперейшли від readlineв бібліотеку пітона називається prompt_toolkitв 5.0.0так що це більше не працює.
jellycola

Дякуємо, це було дуже корисно для роботи зі старою версією IPython.
timgeb

8

Мені потрібно було мати можливість інтерактивного перемикання режимів в IPython 5, і я виявив, що ви можете це зробити, відтворивши менеджер підказок на льоту:

a = get_ipython().configurables[0]; a.editing_mode='vi'; a.init_prompt_toolkit_cli()

0

Ви можете встановити 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 і хочете імпортувати всі свої моделі за замовчуванням.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.