Подтвердить что ты не робот

Как использовать vi-ключи в ipython под * nix?

В настоящее время в Bash я использую set -o vi для включения режима vi в приглашении Bash.

Как это сделать в ipython?

Примечание. Если ответ относится ко всем * nix, я удалю OS X из заголовка:)

4b9b3361

Ответ 1

Если кто-то бродит здесь недавно, 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'

Ответ 2

Похоже, что решение работает для многих других совместимых с readline приложений:

Задайте в файле ~/.inputrc следующее:

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

Источник: http://www.jukie.net/bart/blog/20040326082602

Ответ 3

Вы также можете интерактивно переключаться между режимами Vi-mode и Emacs. В соответствии с readline docs для переключения между ними вы должны использовать комбинацию клавиш MCj, но это только позволяет мне переключиться на vi-mode - на моем Mac (где ESC используется как ключ "Meta" ): ESC + CTRL + j. Чтобы вернуться в режим Emacs, можно использовать C-e, но для меня это не показалось мне - я должен был сделать M-C-e - на моем Mac это: ESC + CTRL + e.

FYI my ~/.inputrc настроен следующим образом:

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

Ответ 4

ipython использует библиотеку readline, и это настраивается с помощью файла ~/.inputrc. Вы можете добавить

set editing-mode vi

к этому файлу, чтобы все приложения на основе readline использовали vi keybindings вместо Emacs.

Ответ 5

Мне нужно было переключать режимы в интерактивном режиме в IPython 5, и я нашел, что вы можете сделать это, воссоздав диспетчер подсказок на лету:

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

Ответ 6

Вы можете установить 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 и хотите импортировать все свои модели по умолчанию.