2012-05-01 1 views

ответ

89

В случае, если кто бродит здесь недавно, IPython 5.0 switched from readline to prompt_toolkit, поэтому обновленный ответ на этот вопрос должен пройти один из вариантов:

$ ipython --TerminalInteractiveShell.editing_mode=vi 

... или установить его глобально в конфигурации профиля (~/.ipython/profile_default/ipython_config.py, создайте его с ipython profile create, если вы не имеете его) с:

c.TerminalInteractiveShell.editing_mode = 'vi' 
+2

Я пришел сюда, чтобы опубликовать этот ответ - спасибо, что избил меня :) –

+1

Спасибо. Это досадно трудно найти в документах для IPython, Jupyter или prompt_toolkit. – jth

+1

Где я могу добавить настраиваемые привязки привязки клавиш? – Aravinda

30

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

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

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

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

+5

Be * * очень осторожны с 'набор новообращенного-мета на '. Он конфликтует с входом в unicode, поэтому, если вы вставляете или вводите unicode, вы можете инициировать различные события, что может быть неожиданным. Например, попробуйте ввести ü, и вы увидите интересный результат. – minrk

+3

Знаете ли вы, что делают последние две строки? Быстрая проверка показывает, что только первая строка дает базовые комбинации клавиш vi - хотелось бы знать, есть ли причина добавлять другие. – weronika

+1

@weronika Похоже, что '' set keymap vi 'изменяет, какая комбинация клавиш (т.е. режим) будут влиять на следующие команды] (http://stackoverflow.com/a/10002721/84745) и ['set convert-meta on' изменяет поведение некоторых клавиш] (http://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html). Я не уверен, нужны ли они вам. – s4y

8

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

set editing-mode vi 

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

+7

'ipython' переключился с' readline' на библиотеку python под названием 'prompt_toolkit' в' 5.0.0', поэтому это больше не работает. – jellycola

10

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

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

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

Я пытался выяснить, почему M-C-j не работал все это время! – shangxiao

2

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

a = get_ipython().configurables[0]; a.editing_mode='vi'; a.init_prompt_toolkit_cli() 
Смежные вопросы