Стандартный интерпретатор Python имеет режим команды vi? - PullRequest
25 голосов
/ 11 февраля 2009

это будет звучать довольно невежественно, но:

Я немного поработал в интерпретаторе python (python 2.4 на RHEL 5.3) и неожиданно оказался в «командном режиме vi». То есть, я могу редактировать предыдущие команды с типичными привязками клавиш vi, двигаясь влево с помощью h, удаляя с помощью x ...

Мне это нравится - единственное, я не знаю, как я сюда попал (возможно, это из-за одного из импортированных мной модулей: pylab / matplotlib?).

Может кто-нибудь пролить свет на то, как включить этот режим в интерпретаторе?

Ответы [ 4 ]

30 голосов
/ 11 февраля 2009

Этот вид всего зависит от нескольких вещей.

Прежде всего, оболочка python использует readline, и здесь важен ваш ~/.inputrc. То же самое с psql интерпретатором командной строки PostgreSQL и mysql оболочкой MySQL. Все они могут быть настроены на использование привязок команд в стиле vi, с историей и т. Д.

<ESC> переведет вас в режим vi в оболочке python после того, как вы установили режим редактирования на vi

В вашем ~/.inputrc* 1010 может потребоваться следующее определение

set editing-mode vi

Информация OSX

OSX использует libedit, который использует ~ / .editrc. Вы можете man editrc для получения дополнительной информации.

Например, чтобы имитировать популярную комбинацию клавиш, которая ищет в вашей истории, вы можете добавить следующее в ваш .editrc

bind "^R" em-inc-search-prev
24 голосов
/ 11 февраля 2009

Ctrl-Alt-J переключается из режима Emacs в режим Vi в программах readline .

В качестве альтернативы добавьте "set edit-mode vi" в ~ / .inputrc

3 голосов
/ 23 апреля 2015

Для Mac OS X 10.10.3, python2.7, режим vi можно настроить, поместив «bind -v» в ~ / .editrc. Последние несколько абзацев справочной страницы намекают на это.

2 голосов
/ 01 апреля 2016

Используйте readline.parse_and_bind метод. Например, попробуйте на интерактивной консоли Python:

import readline
readline.parse_and_bind("set editing-mode vi")

Кажется, что любая команда, которую вы можете установить в .inputrc, вы можете установить и этим методом. Я пробовал это в Python 2.7 и 3.5.1.

См. Также man readline

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...