В настоящее время в 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
Источник: http://www.jukie.net/bart/blog/20040326082602
источник
set convert-meta on
. Он конфликтует с записью Unicode, поэтому, если вы вставляете или вводите unicode, вы можете запускать различные события, что может быть неожиданным. Например, попробуйте ввести ü, и вы увидите интересный результат.set keymap vi
меняет раскладку клавиатуры (т.е. режим), на которую будут влиять следующие команды , иset convert-meta on
меняет поведение некоторых клавиш . Я не уверен, нужны ли они вам.set convert-meta on
(и все, что ниже этой строки) будет применяться только к командному режиму, а не к режиму вставки.Вы также можете интерактивно переключаться между режимом Vi и режимом Emacs. Согласно документам readline, чтобы переключаться между ними, вы должны иметь возможность использовать комбинацию клавиш MCj, но это, похоже, позволяет мне переключиться в режим vi - на моем Mac (где ESC используется как клавиша `` Мета '' ) это: ESC+ CTRL+ j. Чтобы вернуться в режим Emacs, можно использовать Ce, но это, похоже, не сработало для меня - мне пришлось вместо этого выполнить MCe - на моем Mac это: ESC+ CTRL+ e.
К вашему сведению, мой ~ / .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
в библиотеку питона называется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 и хотите импортировать все свои модели по умолчанию.
источник