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