В настоящее время в Bash я использую set -o vi
для включения режима vi в приглашении Bash.
Как это сделать в ipython?
Примечание. Если ответ относится ко всем * nix, я удалю OS X из заголовка:)
В настоящее время в Bash я использую set -o vi
для включения режима vi в приглашении Bash.
Как это сделать в 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
Вы также можете интерактивно переключаться между режимами 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
ipython
использует библиотеку readline, и это настраивается с помощью файла ~/.inputrc
. Вы можете добавить
set editing-mode vi
к этому файлу, чтобы все приложения на основе readline
использовали vi keybindings вместо Emacs.
Мне нужно было переключать режимы в интерактивном режиме в 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 и хотите импортировать все свои модели по умолчанию.