Вопрос или проблема
Как относительно новый пользователь, я недавно обнаружил трюк с открытием текущей строки терминала в $EDITOR, используя горячую клавишу C-x C-e
. Это изменило мою жизнь и значительно упростило написание циклов и тому подобного.
Есть ли способ сделать это после входа в оболочку python в терминале?
Я сталкиваюсь с той же проблемой, когда пишу быстрые скрипты на python.
Интерпретатор python использует ту же библиотеку редактирования командной строки (libreadline), что и ваша оболочка bash, но запуск вашего $EDITOR
, похоже, не основан на libreadline, он реализован самим bash.
Интерактивный интерпретатор python этого не реализует, поэтому вы не можете сделать это из python
.
Однако вы можете, если используете другой интерактивный интерпретатор, отличный от стандартного python
, и это, вероятно, хороший выбор, если вы хотите действительно интерактивно выполнять python. ipython
позволяет редактировать текущую строку — по умолчанию, нажатием F2. (Это настраивается, если я правильно помню.)
Обычно вы найдете этот интерактивный python интерфейс в пакете, который называется python3-ipython
или подобным образом.
Ответ или решение
Вопрос, заданный пользователем, касается редактирования текущей строки в интерактивной оболочке Python с использованием редактора, заданного в переменной окружения $EDITOR, аналогично тому, как это делается в оболочке bash с помощью горячих клавиш Ctrl+x, Ctrl+e. Важно понять, что функционал, который пользователь ищет, в стандартной оболочке Python отсутствует. Это связано с тем, что возможности вызова $EDITOR в bash реализованы непосредственно самой оболочкой, а не через библиотеку libreadline, которая отвечает за редактирование командной строки как в bash, так и в Python.
Теория:
В оболочке bash использование клавиш Ctrl+x, Ctrl+e позволяет открыть текущую команду в редакторе, указанном в переменной $EDITOR. Это очень полезно для редактирования длинных команд или скриптов прямо из командной строки. Однако этот функционал специфичен для bash и не распространяется на другие среды, такие как интерактивная оболочка Python. В Python используется та же библиотека libreadline для редактирования строк, но функция открытия $EDITOR реализована отдельно в bash.
Пример:
Рассмотрим пример использования iPython, который предоставляет более расширенные функции интерактивного программирования и может служить отличной альтернативой для стандартной оболочки Python. iPython поддерживает открытие текущей строки в редакторе через нажатие клавиши F2 по умолчанию, что делает его более подходящим инструментом для задач, связанных с редактированием и созданием скриптов напрямую в оболочке. Кроме того, iPython позволяет выполнять расширенные возможности, такие как автодополнение, синтаксическое подсвечивание и история сессий, что делает его более мощным инструментом для активного кодирования.
Применение:
Для того чтобы использовать возможность редактирования текущей строки в редакторе в интерактивной среде Python, рекомендуется установка и использование iPython. Процесс установки довольно прост и обычно осуществляется через пакетный менеджер, например, с использованием pip:
pip install ipython
После установки iPython, начните сессию iPython, просто введя команду:
ipython
Когда вы находитесь в интерактивном режиме iPython, можете отредактировать текущую строку или блок кода путем нажатия F2. Это откроет выделенный код в редакторе, указанном в $EDITOR, после чего любые изменения можно будет быстро сохранить и выполнить.
Таким образом, использование iPython предоставляет новый уровень контроля и удобства для отладки и написания кода в интерактивной среде, в отличие от стандартной оболочки Python. Это особенно применимо для разработчиков, которые привыкли к гибкости и мощи редактора $EDITOR в bash и хотят сохранить аналогичные возможности в работе с Python.
Кроме того, iPython может быть конфигурирован для использования других горячих клавиш или возможностей через настройки конфигурации, что добавляет еще больше возможностей для кастомизации рабочего процесса.
В заключение, можно сказать, что для более профессиональной и гибкой работы в интерактивной среде Python лучше воспользоваться iPython, а не стандартной оболочкой, что позволит интегрировать использование любимого редактора через переменную среды $EDITOR и максимизировать производительность рабочего процесса.