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